线性筛素数
#include<iostream> #include<cstdio> #include<cstdlib> #define maxn 100000010 using namespace std; template<typename T> inline void read(T &x){ x=0; bool flag=0; char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') flag=1; for(;isdigit(c);c=getchar()) x=x*10+(c^48); if(flag) x=-x; } int n,q,k; int cnt,isprime[maxn]; bool notprime[maxn]; void shai(int n){ for(int i=2;i<=n;i++){ if(notprime[i]==0) isprime[++cnt]=i; for(int j=1,t;(j<=cnt)&&((t=i*isprime[j])<=n);j++){ notprime[t]=true; if(i==isprime[j]) break; } } } int main(){ read(n),read(q); shai(n); for(int i=1;i<=q;i++){ read(k); printf("%d\n",isprime[k]); } return 0; }