Erichsen sieve method:
For each non-negative integer less than n p, deleting 2p, 3p, 4p ......, after all data has been processed, has not been removed is a prime number.
The idea: recording with a prime number table, a [i] = 1 indicates not a prime number, a [i] = 0 indicates a prime number.
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int n,m,a[10000005],t; int main() { a[1]=1; cin>>n>>m; int pd=sqrt(n+0.5); for(int i=2;i<=pd;i++) if(!a[i]) for(int j=i*i;j<=n;j+=i) a[j]=1; // for(int i=1;i<=100;i++) // cout<<a[i]<<endl; for(int i=1;i<=m;i++) { cin>>t; if(a[t]==0) cout<<"Yes\n"; else cout<<"No\n"; } return 0; }
Note: 1 is not a prime number, need special sentence!