Lucas-Lehmer判定法(详见HIT数论及其应用P38)
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long ll;
ll data[70];
ll Multi(ll a,ll k,ll mod)///乘法防溢出转化为加法
{
ll ret=0;
while(k)
{
if(k&1) ret=(ret+a)%mod;
k>>=1;
a=(a<<1)%mod;
}
return ret;
}
int main()
{
int num;
scanf("%d",&num);
while(num--)
{
int p;
cin>>p;
ll sum=1;
sum<<=p;
sum-=1;
data[1]=4;
for(int i=2;i<=p-1;i++)
{
ll tmp=Multi(data[i-1],data[i-1],sum);
data[i]=(tmp-2)%sum;
}
if(p==2) cout<<"yes"<<endl;
else
{
if(data[p-1]==0) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
}
return 0;
}