python验证素数 Miller-Rabin概率检测法菜鸟都能懂

前提条件

python验证素数 Miller-Rabin概率检测法菜鸟都能懂_第1张图片
不解释,数学家的结晶
在这里插入图片描述
如果p为素数,在 1~p-1之中,只有1和p-1的平方mod p等于1

证明如下
python验证素数 Miller-Rabin概率检测法菜鸟都能懂_第2张图片
-1 mod p 可以看作是 p-1 mod p

python代码

`def tobinary(a):
    d = []
    c = a
    while(c!=0):
        b = c % 2
        c = int(c/2)
        d.append(b)
    return d``
def ml(n):
    for i in range(5): #随机五次
        f = tobinary(n - 1) #n-1转化为二进制
        c = 0
        d = 1
        a = random.randint(2,n//2)
        while(c!=n-1):
            c = 2*c
            x = d
            d = (d*d)%n
            if d == 1:       #二次探测定理
                if x != 1 and x != n - 1:
                    return False
            g = f.pop()
            if(g ==1):
                c=c+1
                d=(d*a)%n
        if d!=1: #费尔玛定理
            return False
    return True

你可能感兴趣的:(密码学,python,安全)