Pollard's Rho Algorithm——求正整數的質因數
阿新 • • 發佈:2019-02-19
Pollard Monte Carlo factorization method 是J. M. Pollard 於1975提出的一種質因數分解的方法。由於其演算法中迭代公式形成的序列點集合X={
迭代的公式為:
rho algorithm具體步驟如下所示:
1) 在N-1到0選擇均勻隨機地選取一個數作為
2) d(N)
3)
NOTE: 一般來說,第一遍操作後一般就能得到所需分解的正整數的質因數(一般為最大質因數),而後迴圈操作將會依次得到比較小的質因數,最後為1.
以下是sample code:
#此程式碼僅為得到所需分解的正整數的最大的質因數,若要得到其所有的質因數,只要對分解後非最大質因數那部分再作ρ 演算法分解即可。PS: 若第一次迴圈後,m=1,則該數為素數
int Pollard_Rho( int num )
{
int y = 2, x = 2, factor = 1;
int count=0;
if (num == 1)
return 1;
else if (num % 2 == 0)
return 2;
else
{
while (factor == 1)
{
if (count > 10) //增加跳出條件,純粹安全,可刪除
return num;
x = (x*x + 1) % num;
y = (((y*y + 1 ) % num) ^ 2 + 1) % num;
factor = gcd( abs(x - y), num );
count++;
}
return factor;
}
}
//求a、b的最大公約數
int gcd(int a, int b)
{
int remainder;
while (b != 0) {
remainder = a % b;
a = b;
b = remainder;
}
return a;
}