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

这篇博客探讨了素数p的一个特性:在1到p-1的范围内,除了1和p-1之外,没有其他数的平方模p等于1。通过二次探测定理和费尔玛定理,作者提供了Python代码来随机验证这个数学结论。

前提条件

在这里插入图片描述
不解释,数学家的结晶
在这里插入图片描述
如果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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值