以上就是梅森素数的由来;
lucas定理
s0 = 4;
si = s2i − 1 − 2
如果Si-1mod Mp==0,则Mp是素数
怎么证明的一直不怎么明白
例题:梅森素数(nefu 120)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
long long quick_mod(long long a,long long b,long long m)///a*b%m
{
long long ans=0;
while(b)
{
if(b&1)
ans=(ans+a)%m;
b>>=1;
a=(a<<1)%m;
}
return ans;
}
int main()
{
long long sum,data[100],temp;
int n,p;
data[1]=4;
cin>>n;
while(n--)
{
sum=1;
cin>>p;
sum=sum<<p;
sum-=1;
for(int i=2;i<=p-1;i++)///lucas递推
{
temp=quick_mod(data[i-1],data[i-1],sum)///(a-b)%m=(a%m-b)%m
data[i]=(temp-2)%sum;
}
if(p==2)
cout<<"yes"<<endl;
else
{
if(data[p-1]==0)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
return 0;
}

被折叠的 条评论
为什么被折叠?



