思路:Lucas-Lehmer判定法
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll multi(ll a,ll b,ll m)
{
ll ret=0;
while(b>0)
{
if(b&1){
ret=(ret+a)%m;
}
b>>=1;
a=(a<<1)%m;
}
return ret;
}
int main(){
// freopen("data.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
ll p;
scanf("%lld",&p);
ll Mp=(1LL<<p)-1;
ll r=4;
for(int i=2;i<=p-1;++i){
ll tmp=multi(r,r,Mp);
tmp-=(2%Mp);
r=tmp%Mp;
}
if(p==2)printf("yes\n");
else
if(r==0)printf("yes\n");
else printf("no\n");
}
return 0;
}