首页 > 其他 > 详细

梅森素数判定模板

时间:2015-11-21 00:36:40      阅读:194      评论:0      收藏:0      [点我收藏+]

对于一个素数a,2^a-1叫做梅森数。 如果2^a-1为素数则叫做梅森素数。

我们知道,如果a为合数,则2^a-1一定不是素数。

2^a-1为素数,则a必为素数。

如果a为素数,则2^a-1可为素数,也可为合数。

 

unsigned long long multi_pow(unsigned long long x,unsigned long long x1,unsigned long long mod)
{
    unsigned long long sum=0;
    while(x1)
    {
        if(x1&1) sum = (sum+x)%mod;
        x1 >>= 1;
        x = (x<<1)%mod;
    }
    return sum;
}

bool check_primemason(int n) //测试2^n-1 是不是素数
{
    unsigned long long r=4;
    unsigned long long mod=(unsigned long long)(1LL<<n)-1;
    for(int i=2;i<n;i++)
    {
        r=multi_pow(r,r,mod);
        r = (r-2+mod)%mod;
    }
    if(n==1) return 0;
    if(n==2) return 1;
    if(r==0) return 1;
    return 0;
}

 

梅森素数判定模板

原文:http://www.cnblogs.com/chenhuan001/p/4982635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!