给出N个正整数,检测每个数是否为质数。如果是,输出"Yes",否则输出"No"。
Input
第1行:一个数N,表示正整数的数量。(1 <= N <= 1000)
第2 - N + 1行:每行1个数(2 <= S[i] <= 10^9)
Output
输出共N行,每行为 Yes 或 No。
Input示例
5
2
3
4
5
6
Output示例
Yes Yes No Yes No
贴模板就行
#include <iostream>
typedef long long ll;
using namespace std;
int t;
ll pow_mod(ll a,ll i,ll mod)
{
ll ans=1;
while(i)
{
if(i&1)
ans=ans*a%mod;
a=a*a%mod;
i>>=1;
}
return ans;
}
bool test(int n,int a,int d)
{
if(n==2)
return true;
if(n==a)
return true;
if((n&1)==0)
return false;
while(!(d&1))
d=d>>1;
int t=pow_mod(a,d,n);
while((d!=n-1)&&(t!=1)&&(t!=n-1))
{
t=(long long)t*t%n;
d=d<<1;
}
return (t==n-1||(d&1)==1);
}
bool is_prime(int n)
{
if(n<2)
return false;
int a[]={2,3,61};
for(int i=0;i<=2;i++)
if(!test(n,a[i],n-1))
return false;
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin>>t;
while(t--)
{
int n;
cin>>n;
if(is_prime(n))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}