Pollard's Rho 快速質因數分解 複習小記
阿新 • • 發佈:2019-01-09
Description
為什麼又是複習小記?因為又忘了個精光QAQ
Pollard’s Rho
分治思想
我們實現過程
如果能找到任意一個
隨機演算法的改進
如果每次隨機
基於生日悖論的概率原理
從
這啟示我們判定
步驟
- 定義函式
f(x)=x2+c ,c 隨機給出 - 注意到因為是模
n 意義下,所以x 的取值會成環,類似ρ x 每次走一步,y 每到2j 的時間點走一次(最玄學的部分)- 每次判定
(abs(x−y),n) 是否為1 - 若
x=y 則退出,重新隨機c
板子
ll pollard_rho(ll n,ll c)
{
int i=1,k=2;
ll x=rand()%n;ll y=x;
for(;;)
{
i++;
x=(qmul(x,x,n)+c)%n;
ll d=gcd(abs(x-y),n);
if (d!=1 && d!=n) return d;
if(y==x) return n;
if(i==k) y=x,k<<=1;
}
}
void find(ll n)
{
if(n==1) return;
if(miller_rabin(n))
{
a[++num]=n;
return;
}
ll d=n;
while(d>=n) d=pollard_rho(n,rand()%(n-1)+1);
find(d);
while(n%d ==0) n/=d;
find(n);
}