zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    javascript 中数字计算精度缺失问题
    javascript闭包
    MySQL数据库的创建
    原生项目使用 sass
    git工具命令
    如何将你的node服务放到线上服务器
    Cookie、Session、Token 的区别
    东北师大-构建之法-2020秋最终成绩(并非期末成绩)
    20201220-东北师范大学-助教-周总结-第14次
    东北师范大学-构建之法-20201207作业成绩
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7273745.html
Copyright © 2011-2022 走看看