直接输出:

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8 + 1;
int prime[INF];
bool vis[INF];
int Euler(int n, int k=0){
for(int i=2; i<=n; i++){
if(vis[i] == 0) prime[k++] = i;
for(int j=0; j<k; j++){
if(i*prime[j] > n) break;
vis[i*prime[j]] = true;
if(!(i%prime[j])) break;
}
}
return k;
}
int main(){
int n = Euler(INF);
for(int i=0; i<n; i++){
printf("%d\t", prime[i]);
}
return 0;
}

洛谷模板题:

【模板】线性筛素数

题目背景

本题已更新,从判断素数改为了查询第 素数筛法——欧拉筛_c++ 小的素数
提示:如果你使用 ​​​cin​​​ 来读入,建议使用 ​​std::ios::sync_with_stdio(0)​​ 来加速。

题目描述

如题,给定一个范围 素数筛法——欧拉筛_c++_02,有 素数筛法——欧拉筛_c++_03 个询问,每次输出第 素数筛法——欧拉筛_c++

输入格式

第一行包含两个正整数 素数筛法——欧拉筛_c++_05,分别表示查询的范围和查询的个数。

接下来 素数筛法——欧拉筛_c++_03 行每行一个正整数 素数筛法——欧拉筛_c++,表示查询第 素数筛法——欧拉筛_c++

输出格式

输出 素数筛法——欧拉筛_c++_03

样例 #1

样例输入 #1

100 5
1
2
3
4
5

样例输出 #1

2
3
5
7
11

提示

【数据范围】
对于 素数筛法——欧拉筛_c++_10 的数据,素数筛法——欧拉筛_i++_11素数筛法——欧拉筛_i++_12,保证查询的素数不大于 素数筛法——欧拉筛_c++_02

Data by NaCly_Fish.

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;
int n, q;
const int INF = 1e8 + 1;
int prime[INF];
bool vis[INF];
void Euler(int n, int k=0){
for(int i=2; i<=n; i++){
if(vis[i] == 0) prime[k++] = i;
for(int j=0; j<k; j++){
if(i*prime[j] > n) break;
vis[i*prime[j]] = true;
if(!(i%prime[j])) break;
}
}
}
int main(){
cin >> n >> q;
Euler(INF);
for(int i=0, x; i<q; i++){
cin >> x;
cout << prime[x-1] << endl;
}
return 0;
}