线性筛模版
\(O(n)\)时间复杂度内筛出素数,即每个数只会被筛一遍
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e8+5;
ll n,q,k,cnt,pri[maxn];
bool ispri[maxn];
void init(){
ispri[0]=ispri[1]=true;
for(ll i=2;i<=n;i++){
if(!ispri[i]){
pri[++cnt]=i;
}
for(ll j=1;i*pri[j]<=n&&j<=cnt;j++){
ispri[i*pri[j]]=true;
if(i%pri[j]==0){
break;
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>q;
init();
while(q--){
cin>>k;
cout<<pri[k]<<"\n";
}
return 0;
}

浙公网安备 33010602011771号