G08【模板】筛质数 埃氏筛法 欧拉筛法
G08 筛质数 埃氏筛法 线性筛法_哔哩哔哩_bilibili
// 线性筛素数 欧拉筛法 O(N) 1e8内有5761455个素数 #include<bits/stdc++.h> using namespace std; const int N=1e8+5; int n,q,k; int cnt,prim[N]; //记录质数 bool comp[N]; //划掉的合数 void Euler(int n){ //欧拉筛法 for(int i=2; i<=n; i++){ if(!comp[i]) prim[++cnt]=i; for(int j=1; j<=cnt && i*prim[j]<=n; j++){ comp[i*prim[j]]=true; if(i%prim[j]==0) break; } } } int main(){ scanf("%d %d",&n,&q); Euler(n); while(q--){ scanf("%d",&k); printf("%d\n",prim[k]); } }
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e8+5; int n,q,k; int cnt,prim[N]; //记录质数 bool comp[N]; //划掉的合数 void Eratosthenes(int n){ //埃氏筛法 for(ll i=2; i<=n; ++i){ if(!comp[i]){ prim[++cnt]=i; for(ll j=i*i; j<=n; j+=i) comp[j]=1; } } } int main(){ scanf("%d %d",&n,&q); Eratosthenes(n); while(q--){ scanf("%d",&k); printf("%d\n",prim[k]); } }
浙公网安备 33010602011771号