• Miller-rabin判素数


    用Miller-rabin判素数之前,先要知道一个叫费马小定理的东西。

    费马小定理:如果p是质数,那么任意和p互质的数的p-1次方对p取模都等于一。

    即:任意gcd(a,p)==1,那么a^(p-1)≡1(mod p)

    既然我们用费马小定理又得到了一个新的质数的性质,那么我们就可以用这个性质来判定素数。

    为了判定p是不是质数,我们随机检验一些a检验a^(p-1)mod p是否为1

    但是这样判定一个素数并不是百分百正确的,有一些数不是素数,但依据费马小定理还是会判定成素数。

    例如:p=561=3*11*17,无论如何取a,都满足费马小定理的素数性质。

    于是我们就需要利用二次探测的思想:
    p是质数,则x^2≡1(mod p)仅有两个解,x1=1,x2=p-1(很显然,(p-1)^2=p^2-2p+1),我们这样计算a^(p-1):

      1.我们令p-1=2^s * t(因为p是质数,p-1一定是偶数,偶数一定可以表示成2^s * t)

      2.然后我们来分解2^s * t,设x0=a^t,xi=x(i-1)^2,最后我们可以得到xs=a^(p-1)(等比数列)

      3.如果|xi|!=1,且x(i+1)=1,那么p显然不是质数(因为该方程只有两个解,如果出现这种情况就是有另解,为合数)。

    上面介绍了算法原理,下面是算法流程:

      1.按照上面的方法计算a^(p-1)(如果p不是质数,那么此时有可能直接返回)

      2.检查a^(p-1)≡1(mod p)

      3.当a是2~p-1的随机数时,如果p返回是合数,那他就是一定合数,如果返回是质数,则有一半的机会是质数

    PEACE
  • 相关阅读:
    推荐有关微信开发的十个开源项目
    curl 常见错误码
    mysql修改root密码
    BAT批处理之文件与文件夹操作代码(附xcopy命令详解)
    UE4 Pak包加载
    libcurl 文件上传
    win7右键在目录当前打开命令cmd窗口
    SQLiteDeveloper破解
    Excel替换应用
    解决局域网2级路由互相连接共享的问题
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7273745.html
Copyright © 2020-2023  润新知