小黃書第19章p82頁根據合數的拉賓-公尺勒測試可得到素數的必要條件。
參考資料。
以poj1811 prime test 為例。
#include#include#include#includeusing namespace std;
typedef long long ll;
const int s=20;
ll pfact[10005],ant;
ll multi_mod(ll a,ll b,ll c)
a<<=1;
if(a>=c)a%=c;
b>>=1;
} return ans;
}ll pow_mod(ll a,ll b,ll c)
a=multi_mod(a,a,c);
b>>=1;
} return ans;
}bool check(ll a,ll n,ll x, ll t)
/* if(ret==1)return false;
else*/
return true;
}bool miller_rabin(ll n)
//上面的步驟求得n-1=2^k*q,q是奇數.
for(int i=0;i1時則有p,2p,3p,4p...
// 必須abs(y-x0).?
if(d>1&&d<=x)return d;
// if(d==x)return d,即if(y==x0)return x;
if(++i==k)y=x0,k<<=1;//brents』algorithm?效率更加?
}}void getpf(ll n)
ll p=n;
while(p>=n)
getpf(p);
getpf(n/p);
}int main()
ant=0;
ll ans;
getpf(n);
ans=pfact[0];
for(int i=1;i
n 素因子分解中素數p的冪
n 素因子分解中素數p的冪為 n p n p 2 n p 3 nefu 118 傳送門 從輸入中讀取乙個數n,求出n!中末尾0的個數。輸入有若干行。第一行上有乙個整數m,指明接下來的數字的個數。然後是m行,每一行包含乙個確定的正整數n,1 n 1000000000。對輸入行中的每乙個資料n,輸出一行...
數論 素數篩選法與整數的素因子分解
篩選法 求出n以內的素數,最快的應該是篩選法。篩選法的思路是 要求10000以內的素數,把1 10000都列出來,1不是素數,劃掉 2是素數,所有2的倍數都不是素數,劃掉 取出下乙個倖存的數,劃掉它的所有倍數 直到所有素數找完為止。這種做法的空間複雜度是o n 時間複雜度o n logn const...
牛客網 kotori和素因子(dfs 篩素數)
kotori拿到了一些正整數。她決定從每個正整數取出乙個素因子。但是,kotori有強迫症,她不允許兩個不同的正整數取出相同的素因子。她想知道,最終所有取出的數的和的最小值是多少?注 若a k 0,則稱k是a的因子。若乙個數有且僅有兩個因子,則稱其是素數。顯然1只有乙個因子,不是素數。第一行乙個正整...