梅森素数的判定(Lucas-Lehmer判定法 和 miller - Rabin 判定法)


Mp = 2^p-1 且 p是素数,称为梅森数,若Mp是素数则称为梅森素数。


Lucas-Lehmer判定法 判定一个数是否为梅森素数 效率足够高,如果题目特意为梅森素数设计,会卡复杂度,那么套用此方法即可。算法复杂度为O(p^3)。
关于卢卡斯-莱默算法参考http://blog.csdn.net/cFarmerReally/article/details/52153410?locationNum=7&fps=1

思路:R.1 = 4;R.k = (R.k-1 ^ 2 - 2) % Mp; 

如果R.p-1 == 0,则是梅森素数,否则不是。 

特殊判断,p == 2,即Mp = 3是梅森素数。

为了乘法溢出可以采用换加法来处理。
梅森素数表:因为个数不多所以常常可以打表
相关拓展:完美数,华林问题,蔡天新的课程


可以做模板来使用了:

long long multi(long long a, long long b, long long m){//实现a * b % m的操作,用2 * 3 = 6模拟一下就懂了
    long long ans = 0;
    while(b > 0){
        if(b & 1)  ans = (ans+a) % m;
        b >>= 1;
        a = (a<<1) % m;
    }
    return an
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值