Luogu P3383线性筛素数
#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
",isprime[k]);
}
return 0;
}