Miller-Rabin算法

  Miller-Rabin算法用于检测一个数n是否是素数。其时间复杂度上界为O(klog2(n)),其中k为检测的轮数。增大k可以提高Miller-Rabin算法的准确度。

  要检测一个数是否为素数,简单的算法有两种,第一种是对2~√n之间的数,检查其是否是n的因子,其时间复杂度为O(√n)。第二种就是打表法,利用欧拉筛可以在O(N)的时空复杂度内获取1~N之间的所有素数并存储。无论是哪种情况,对于超大的n,都要消耗可怕的时间来进行判断,譬如取n为1e18,这样两种算法在现代计算机上都是无法结束的(后者会直接内存不足)。

  数论中的费马小定理中指出,对于任意素数p,以及对于模p的剩余类环{1,2,...,p-1}中的任意数x,都满足x^p=x(mod p)。因此我们可以用这个小小的技巧来排除大量的合数。譬如对于素数5,我们发现2^5(mod 5)=2,而对于6,有2^6(mod 6)=4。

  但是费马小定理中p是素数是x^p=x(mod p)的充分条件,而非必要条件,比如4^6=4(mod 6),但我们不能说6是素数。因此我们需要从模p的剩余类环中选取更多的数进行测试,以增强结果的可信度,只要存在一个数x不满足x^p=x(mod p),那么p就绝不可能是素数。但是还是存在一类极端的合数p,使得对于任意1,..,p-1中的x都满足x^p=x(mod p),这类合数称为Carmichael数,一个例子就是561。由于这类数的存在,使得我们用费马小定理完全无法正确断定一个数为素数还是合数。

  而Miller-Rabin算法的出世使得相当一类的满足费马小定理的合数无法通过素数测试。Miller-Rabin算法基于一个事实,若x^2=1(mod p),那么若p是素数,则(x-1)(x+1)=0(mod p),除非p为2,否则(x-1)与(x+1)在模p的性质下是不相等的,无论p是否为2,都可以保证有(x-1)=0(mod p)或者(x+1)=0(mod p)(因为模p剩余类环是整环),即x=1或x=p-1。因此我们可以在p通过数x的费马测试后,即x^p=p(mod p),也可以写作x^(p-1)=1(mod p),若p-1是偶数,那么可以继续通过x^((p-1)/2)是否等于1或(p-1)来进行测试。如果测试通过还可以继续判断是否满足x^2k=1(mod p),从而继续进行判断。只要一环判断不通过,那么就保证p是合数。

  看一下我们方才提过的Carmichael数561,进行Miller-Rabin测试:

  2^560=1(mod 561)  满足

  2^280=1(mod 561)  满足

  2^140=67(mod 561)   不满足
  下面给出我个人使用的MR算法的模板:

mr(p)
    if(p == 2 || p == 3 || p == 5 || p == 7)
        return true
    return mr0(2, p) && mr0(3, p) && mr0(5, p) && mr0(7, p)

mr0(x, p)
    if (x^(p-1)) % p != 1
        return false
    k = p - 1
    while k % 2 == 0
        k = k / 2
        t = x^k
        if(t != 1 && t != p - 1)
            return false
        if(t == p - 1)
            return true
    return true

    由于mr0中的幂运算可以利用快速幂乘法的技术来实现,因此一次幂运算的时间复杂度为O(log2n),而while循环最多执行log2(p)次,每次循环执行一次幂乘运算,故总的时间复杂度为O((log2p)^2)。

转载于:https://www.cnblogs.com/dalt/p/8436883.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值