Skip to content

Commit ec89465

Browse files
committed
Dixon algorithm enhancement
1 parent 975bcd0 commit ec89465

File tree

1 file changed

+14
-21
lines changed

1 file changed

+14
-21
lines changed

dixon.py

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
def dixon(N,B=7):
55

6-
tmp = []
7-
pairs = []
8-
96
def primes(B):
107
p = 2
118
tmp = [p]
@@ -15,28 +12,24 @@ def primes(B):
1512
return tmp
1613

1714
base = primes(B)
18-
19-
#print(base)
20-
2115
start = isqrt(N)
2216
i = start
17+
18+
ii2N = []
2319
while i<=N:
24-
for j in range(len(base)):
25-
l = pow(i,2, N)
26-
r = pow(base[j],2,N)
27-
#print(i,j,l,r)
28-
if l == r:
29-
pairs.append([i,base[j]])
30-
#print(pairs)
20+
ii2N.append((i,pow(i,2,N)))
3121
i+=1
3222

33-
#print(pairs)
34-
35-
for i in range(len(pairs)):
36-
x = pairs[i][0]
37-
y = pairs[i][1]
38-
f = (gcd(x-y,N))
39-
if 1 < f < N:
40-
return f,N//f
23+
basej2N = []
24+
for j in range(0,len(base)):
25+
basej2N.append(pow(base[j],2,N))
26+
27+
for i,i2N in ii2N:
28+
for k in range(0,len(base)):
29+
if i2N == basej2N[k]:
30+
f=gcd(i-base[k],N)
31+
if 1 < f < N:
32+
return f,N//f
33+
return -1
4134

4235
print(dixon(int(sys.argv[1])))

0 commit comments

Comments
 (0)