傳統的方法:
//輸入:int a, n;
//輸出:int i;
//演算法效果:求最大的i, 使得n!(n的階乘)可以被a^i(a的i次方)整除,而不能被a^(i+1)(a的i+1次方)整除。
#include
<
iostream.h
>
#include
<
string
.h>
double
fac(
intn);
intinline fun1(
inta,
intn);
//int fun2(int a,int n);
void
main()
//階乘計算
double
fac(
intn)
return
re;}
}int
inline fun1(
inta,
intn)
else
}returnp;}
使用質數分解實現(非傳統方法):
//輸入:int a, n;
//輸出:int i;
//演算法效果:求最大的i, 使得n!(n的階乘)可以被a^i(a的i次方)整除,而不能被a^(i+1)(a的i+1次方)整除。
#include
<
iostream.h
>
#define
size 100
struct
primeitem
;int
*prime_factors(
intn);
//分解質因數
primeitem
*getitemarray(
intn);
//獲取質數item鍊錶
intlocal(primeitem array,
intx);
//元素定位
intmaxj(
int*
prime,primeitem
*arrayitem);
void
main()
//***************分解質因數***************=
//int
*prime_factors(
intn)
else
break;}
}array[index]=n;
//index++;
array[index]=0
;//設定結束標誌
return
array;
}primeitem
*getitemarray(
intn)
for(i=2
;i<=
n;i++
)elsej++
;}}return
arraylist;
}int
maxj(
int*
prime,primeitem
*arrayitem)
else}}
if(prime[i]==0
&&i!=0
)else
}return
count;
}int
local(primeitem
*array,
intx)
return-1
;}
求m可以被n整除的數 深搜剪枝題
給乙個數n,讓你找出乙個只由0,和1組成的十進位制數m,要求這個正整數m可以被n整除.輸入格式 輸入乙個整數n 1 n 200 輸出格式 對於輸入整數n的每乙個值,輸出m的相應值,保證有乙個 數字長度小於19位的數字.如果有乙個給定值n有多個解,其中任何乙個都是可以接受的.題解 乙個cnt記錄位數,...
能被N整除的數字的特徵(數學知識點)
能被1整除的數 好像是所有數都行 能被2整除的數 末位數字是偶數的數 能被3整除的數 各位數字之和能被3整除 能被4整除的數 末尾兩位數字能被4整除 能被5整除的數 末位是0或5的數 能被6整除的數 既能被2整除,又能被3整除 能被7整除的數 方法1 割尾法 適用於數字位數較少 乙個數割去末位數字,...
一連串1組成的數被n整除問題
給出乙個整數n 0 例如 n 3時,111 3 37,則結果為37 輸入有多行 不超過1000行 每行乙個整數n,以eof結束 如果一連串1能被n整除,輸出最小的一連串1被n整除後的結果 否則,輸出 impossible 2 3 7impossible 37 15873 分析 首先考慮幾個特殊的數,...