波拉德';Python中的s-Rho启发式算法

波拉德';Python中的s-Rho启发式算法,python,Python,这是一个国产函数,但存在一些问题。我的猜测是我在循环中的某个地方做了手脚。它并没有给出一致的答案——我知道这就是“启发式”的意思,但我认为这对n==57应该没有问题 def Rho_Heuristic(n): import random cum_d = 1 x = random.randint(0, n-1) y = x k = 2 i = 1 while not(cum_d == n): i = i + 1 x

这是一个国产函数,但存在一些问题。我的猜测是我在循环中的某个地方做了手脚。它并没有给出一致的答案——我知道这就是“启发式”的意思,但我认为这对n==57应该没有问题

def Rho_Heuristic(n):
    import random
    cum_d = 1
    x = random.randint(0, n-1)
    y = x
    k = 2
    i = 1
    while not(cum_d == n):
      i = i + 1
        x = (x*x-1)%n
        d = GCD(y-x, n)
       if (not(d == 1) and not(d == n)):
           print d
           cum_d = (d * cum_d)
       if i==k:
           y = x
           k = 2*k;

如果您想要任何给定输入的确定性输出,请调用:

random.seed(0) 

当你开始你的程序时。

波拉德的Rhos启发式是一种启发式。返回的因子总是正确的,很少返回所有因子。公屋是好的,如果你需要找到具有某些特征的因素。当我实施概念验证RSA攻击时,我一直在运行它,直到得到有意义的素数。

你的问题是什么?当对一个随机整数进行采样时,您如何期望得到一致的答案?另外,对于其他没听说过这个算法的人来说:这个实现似乎是从:。