複雜度爲nlogn。c++
算法思想爲:枚舉1~sqrt(n),而後把每個數的倍數都都打上不是素數的標記。算法
還要特別注意0,1不是素數,打標記枚舉到i*k<=n.spa
代碼以下code
#include<bits/stdc++.h> #define maxn 10000001 using namespace std; bool prime[maxn]; int n,m; void make_prime() { memset(prime,true,sizeof(prime)); prime[0]=prime[1]=false;//0,1都不是素數 int t=sqrt(n);//開根號 for(int i=2;i<=t;i++) { if(prime[i]) { for(int j=2*i;j<=n;j+=i)//加倍 { prime[j]=false; } } } return; } int main(){ cin>>n>>m; make_prime(); for(int i=1,x;i<=m;i++){ cin>>x; if(x==0||x==1) cout<<"No"<<endl; else if(prime[x]==true) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }