费马素性检验:

给定奇整数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()