You are on page 1of 2

import random

from time import time


import math
#from fractions import gcd
from math import gcd
def pgcd(a,b):
while b>0:
a,b=b,a%b
return a

def PollardRho(n):

f = lambda x: x*x + 2
x, y, d= 2, 2, 1
cp = 0
while d==1:
cp = cp + 1
x = f(x)%n
y = f(f(y))%n
d = gcd(abs(x-y),n)

return d,cp

def PollardRho2(n):

f = lambda x: x*x + 2
x, y, d= 2, 2, 1
cp = 0
m = 10
tmp = 1
while d==1:
cp = cp + 1
x = f(x)%n
y = f(f(y))%n
tmp = (tmp*abs(x-y))%n
if cp%m == 0:
d = gcd(tmp,n)
return d,cp

def algoNif(n):
cp = 0
for i in range(3,(int)(math.sqrt(n)),2):
cp = cp+1
if n%i == 0:
return i,cp
return ""

if __name__ == '__main__':

print("Enter an integer")
n = int(input())

###__PollardRho__###
dep = time()
d,cp = PollardRho(n)
temp = time()-dep

print("Method PollardRho")
if d==1 or d==n:
print("The number is prime")
else:
print("The number is not prime")

print(n, "=", d, "*", (int)(n/d))


print(cp, "tour")
'''print(d)'''
print("Temps: ", temp)
print("######################################")

###__PollardRhoAmeliore__###
dep = time()
d,cp = PollardRho2(n)
temp = time()-dep

print("Improved PollardRho method")


if d==1 or d==n:
print("Le nombre est premier")
else:
print("Le nombre n'est pas premier")

print(n, "=", d, "*", (int)(n/d))


print(cp, "tour")
'''print(d)'''
print("Temps: ", temp)
print("######################################")

###__MethodNaif__###
dep = time()
d, cp =algoNif(n)
temp = time() - dep
print(n, "=", d, "*", (int)(n/d))
print(cp, "tour")
'''print(d)'''
print("Temps: ", temp)

You might also like