线性筛

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
inline int read(){
    int num=0,f=1; char c=getchar();
    while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
    while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
    return num*f;
}
#define maxn 10000001
bool prime[maxn+1];
inline int jud(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            cout<<"NO"; return 0;
        }
    }
    cout<<"YES";
}
inline void dark(int n){
    for(int i=1;i<=n;i++)
      if(i&1) prime[i]=1;
    for(int i=3;i<=n;i+=2)
       if(prime[i])
         for(int j=i+i;j<=n;j+=i)
            prime[j]=0;
//    for(int i=2;i<=n;i++)
//       if(prime[i]) 
//         cout<<i<<" ";
   prime[2]=1; 
   prime[1]=0;
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    dark(n);
    for(int i=1;i<=m;i++){
        int x;
        scanf("%d",&x);
        if(prime[x]) cout<<"Yes"<<'\n';
        else cout<<"No"<<'\n';
    }
}

 

posted @ 2017-11-09 11:51  TimDucan  阅读(105)  评论(0编辑  收藏  举报