一、题目
二、解法
作者讲的解法只是一个缩略版,要想获得更好的理解请参照大佬的博客。
0x01 生日悖论
如果你不是很了解,点此观看
生日悖论告诉了我们一个道理,也就是我们用组合计算的方式会比单个确切值更有概率得到答案。什么意思呢?举个例子,我们要找到 x x x,用 r − l r-l r−l的方式比直接 r a n d rand rand概率有更大概率得到 x x x,这里作者就不给详细证明了,感性理解。
所以与其直接 r a n d rand rand,我们尝试用组合计算的方式生成我们的因数。
0x02 p o l l a r d _ r h o pollard\_rho pollard_rho的随机函数
我们考虑生成一个伪随机数列,考虑用组合的方式生成因数计算 g c d gcd gcd, p o l l a r d pollard pollard给出了他的函数:
f ( x ) = x ∗ x + c ( m o d N ) f(x)=x*x+c (mod N) f(x)=x∗x+c(modN)
其中 c c c是我们用 r a n d rand rand生成的一个函数,这个函数大概长这样。
可以看出,虽然它生成的数较为随机,但还是存在循环节,所以才叫伪随机数,生成数列的轨迹很像希腊字母 ρ \rho ρ,所以这个算法也叫 p o l l a r d _ r h o pollard\_rho pollard_rho算法。
0x03 基于 f l o y d floyd floyd算法优化的 p o l l a r d _ r h o pollard\_rho pollard_rho
因为 p o l l a r