因为数据很大所以要用线性筛。。
#include<iostream> #include<cstdio> using namespace std; typedef long long ll; int rd(){ ll x=0,fl=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')fl=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*fl; } int n,m,cnt,pri[10000100],ex[10000100]; void phi(){ ex[0]=ex[1]=1;cnt=0; for(int i=2;i<=n;i++){ if(!ex[i])pri[++cnt]=i; for(int j=1;j<=cnt&&i*pri[j]<=n;j++){ ex[i*pri[j]]=1; if(!(i%pri[j]))break; } } } int main(){ n=rd();m=rd();phi(); //for(int i=1;i<=cnt;i++)printf("%d ",pri[i]);cout<<endl; for(int i=1;i<=m;i++){ int x=rd(); if(!ex[x])printf("Yes "); else printf("No "); } return 0; }