大素數測試和大數素因子分解

2021-07-15 00:11:09 字數 999 閱讀 9997

小黃書第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只有乙個因子,不是素數。第一行乙個正整...