注意一点的是快速幂,过程中乘法,使用快速乘法,避免溢出
#include<bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define fastIO ios::sync_with_stdio(false);cin.tie(0);
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const double EPS = 1e-8;
const int maxn = 40;
const int inf = 1 << 28;
LL qsc(LL a,LL b,LL mod){
LL sum = 0;
while(b){
if(b&1) sum = (sum + a) % mod;
a = (a + a) % mod;
b>>=1;
}
return sum % mod;
}
LL qsm(LL a,LL b,LL mod){
LL res = 1;
while(b){
if(b&1) res = qsc(res,a,mod);
a = qsc(a,a,mod);
b>>=1;
}
return res % mod;
}
//Miller-Rabin 测试素数
bool miler_rabil(LL n){
if(n==2)return true;
if(n==1)return false;
LL u = n -1;
while(!(u&1))u>>=1;
srand((LL)time(0));
for(int i=0;i<1;i++){//测试次数
LL x = rand()%(n-2)+2;//[2,n-1]随机数
x = qsm(x,u,n);
while(u<n){//二次探测定理,y==1 <==> x==1,or x==n-1
LL y = qsm(x,2,n);
if(y==1 && x != 1 && x != n-1) return false;
x = y;u<<=1;
}
if(x!=1) return false;//Fermat测试
}
return true;
}
int main(){
int T;scanf("%d",&T);
while(T--){
LL x; scanf("%lld",&x);
printf("%s\n",miler_rabil(x)?"Yes":"No");
}
return 0;
}