费马素性检验:
给定奇整数n>=3和安全参数t
1、随机选取整数b,(b,n)=1,2<=b<=n-2
2、计算r=b的n-1次方(modn)
3、如果r!=1,则n是合数
4、上述过程重复t次
以下是python代码,如发现错误,请跟博主联系
import random
#n>=3且n是奇整数
n=int(input())
t=int(input())
def gcd(a,b):
while b != 0:
a, b = b, a % b
return a
def b():#找到b
a=random.randint(2,n-2)
if gcd(a,n)==1:
return a
else:
return b()
def fast_mod(x, n, m):#模重复平方法
a = 1
b = x
while True:
temp = n
if n % 2 == 1:
a = a * b % m
b = b * b % m
n = n // 2
if temp < 1:
return a
def fermat():
r = fast_mod(b(), n - 1, n)
if r!=1:
print('n是合数')
else:
for x in range(t):
r=fast_mod(b(),n-1,n)
if r!=1:
print('n是合数')
return
a=1-1/2**t
print('n是素数的可能性大于%.2f'%a)
fermat()