我在python中实现Rho的分解方法时遇到了麻烦。任何帮助,将不胜感激。这是我的尝试和我从书中收到的指示。
def gcd(a,b):
while b !=0:
(a,b)=(b,a%b)
return a
def algb(N):
x=5
y=2
k=1
l=1
n=N
g=gcd(y-x,n)
if g==1:
k=k-1
if k==0:
y=x
l=2*l
k=l
x=(x**2+1) % n
elif g==n:
print "alg fails"
else:
n=n/g
x=x % n
y=y % n
return g
x=(x**2+1) % n
return g,x,y,k,l
print algb(25852)
以下是本书所要做的事情
B1:[initialize] set x <- 5, x' <- 2, k <- 1, l <- 1, n <- N
B2:[test primality] if n is prime, output n; the algorithm terminates
B3:[Factor found?] set g <- gcd(x'-x,n).
If g=1, go on to step B4; otherwise output g.
Now if g=n, the algorithm terminates (and it has failed because we know that n isnt prime).
Otherwise set n <- n/g, x <- x mod n, x' <- x' mod n, and return to step B2.
B4:[advance] set k <- k-1. if k=0, set x' <- x, l <- 2l, k <-l. Set x <- (x<sup>2</sup> + 1) mod n and return to B3
任何有关如何使这项工作的帮助或建议都会很棒
print algb(25852)
应该给我23
,但事实并非如此。
我的教授也告诉我们省略B2,这就是为什么它没有实现。请帮助。这也是来自knuth,v2,第386页第4.5.4节的计算机编程艺术。