普通线性筛
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10000003;
int prime[MAXN];
int tag[MAXN];
int main()
{
int n,m;cin>>n>>m;
fill(prime,prime+MAXN,1);
prime[0]=prime[1]=0;
int t=0;
for(int i=2;i<MAXN;i++){
if(prime[i]==1) tag[t++]=i;
for(int j=0;j<t&&tag[j]*i<MAXN;j++){
prime[i*tag[j]]=0;//筛掉小于等于i的素数和i的积构成的合数
}
}
for(int i=0;i<m;i++){
int a;cin>>a;
if(prime[a]==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
另一种素数筛法参考:https://blog.csdn.net/huang_miao_xin/article/details/51331710
#include<bits/stdc++.h>
using namespace std;
bool isprime(int x){
if(x==1) return false;
if(x==2||x==3) return true;
if(x%6!=1&&x%6!=5) return false;
for(int i=5;i<=sqrt(x);i+=6){
if(x%i==0||x%(i+2)==0) return false;
}
return true;
}
int main()
{
int n,m;cin>>n>>m;
for(int i=0;i<m;i++){
int t;cin>>t;
if(isprime(t)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}