题目地址:洛谷 P3383
#include<cstdio> #include<iostream> using namespace std; const int MAXN=1e8+1000; int n,prime[MAXN],cnt=0; bool isPrime[MAXN]; void init(){ for(int i=1;i<=n;i++)isPrime[i]=1; isPrime[1]=0; for(int i=2;i<=n;i++){ if(isPrime[i]){ prime[++cnt]=i; } for(int j=1;j<=cnt&&prime[j]*i<=n;j++){ isPrime[i*prime[j]]=0; if(i%prime[j]==0){ break; } } } } int main(){ int q; scanf("%d%d",&n,&q); init(); for(int i=1;i<=q;i++){ int num; scanf("%d",&num); printf("%d\n",prime[num]); } return 0; }