检验质数的几个算法,按照算法设计与分析上面的实现的。
#!/usr/bin/python
import random
import math
def exmod(a,m,n):
abin =bin(m)
#print abin
lec = len(abin)
c = 1
for j in range(2,lec):
c = (c*c)%n
if (abin[j] == '1'):
c = (a*c)%n
return c
def ptest1(x):
if(exmod(2,x-1,x)%x == 1):
return "yes"
else:
return "no"
def ptest2(x):
a = random.randint(2,x-2);
if(exmod(a,x-1,x)%x == 1):
return "yes"
else:
return "no"
def primalitytest(x):
q = 0
m = x-1
k = int(math.ceil(math.log(x,2)))
while m%2 == 0:
m = int(math.floor(m/2))
q = q+1
#print q
#print m
for i in range(1,k):
a = random.randint(2,x-2)
t = exmod(a,m,x)
if(t == 0) :
return "yes"
for j in range(0,q-1):
if(t% x == -1 %x):
return "yes"
t = (t*t)%x
return "no"
#print exmod(2,10,12)
#print ptest1(93961)
#print ptest2(93961)
print primalitytest(53)