typedef long long ll;
ll muil(ll a,ll b,ll m) //乘法换加法
{
ll res=0;
while(b>0)
{
if(b&1)
res=(res+a)%m;
b>>=1;
a=(a<<1)%m;
}
return res;
}
ll r[70];
bool is_msprime(int p) //判断第p个数是否为梅森素数
{
ll m=1;
m=(m<<p)-1;
r[1]=4LL;
if(p==2)
return true;
for(int i=2;i<p;i++)
r[i]=(muil(r[i-1],r[i-1],m)-2)%m;
if(r[p-1]==0)
return 1;
return 0;
}
梅森(Lucas-Lehmer判别法+乘法换加法)
最新推荐文章于 2022-08-24 11:28:25 发布