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

Posted Afololer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python验证素数 Miller-Rabin概率检测法菜鸟都能懂相关的知识,希望对你有一定的参考价值。

前提条件

在这里插入图片描述
不解释,数学家的结晶
在这里插入图片描述
如果p为素数,在 1~p-1之中,只有1和p-1的平方mod p等于1

证明如下
在这里插入图片描述
-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验证素数 Miller-Rabin概率检测法菜鸟都能懂的主要内容,如果未能解决你的问题,请参考以下文章

ACM入门之Miller-Rabin素数测试算法

hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测

浅谈Miller-Rabin素数检测算法

Miller-Rabin 素数测试

Miller-Rabin?素数测试算法

Miller-Rabin素数测试