RT,优化了一下,常数是原来的三分之一
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
int n,q,prime[61000000],cnt,k;
bool check[100000005];
inline int read() {
register int x=0;
register char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9') {
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x;
}
int main() {
n=read(),q=read();
cnt=2;
prime[1]=2;
prime[2]=3;
for(int i=4; i<=n; i+=2)check[i]=true;
for(int i=9; i<=n; i+=6)check[i]=true;
for(int i=5; i<=n; i++) {
if(!check[i]) {
prime[++cnt]=i;
if(i>1e5) continue;
for(register int j=i*5; j<=n; j+=i*6) {
check[j]=true;
check[j+(2*i)]=true;
}
}
}
while(q--) {
k=read();
printf("%d\n",prime[k]);
}
}