码迷,mamicode.com
首页 > 其他好文 > 详细

梅森素数判定模板

时间:2015-11-21 00:38:40      阅读:245      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!