线性筛模版

\(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;
}
posted @ 2026-10-17 16:25  beiciqi  阅读(4)  评论(0)    收藏  举报