G08【模板】筛质数 埃氏筛法 欧拉筛法

G08 筛质数 埃氏筛法 线性筛法_哔哩哔哩_bilibili

 

P3383 【模板】线性筛素数 - 洛谷

// 线性筛素数 欧拉筛法 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]);
  }
}
posted @ 2022-09-13 16:59  董晓  阅读(1637)  评论(0)    收藏  举报