问题C - 第 n 小质数
题目描述
输入一个正整数 \(n\),求出第 \(n\) 小的质数。
样例
解法
判断素数和素数筛法的算法众多,此题最优的解法为欧拉筛。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #include <bits/stdc++.h>
#define lli long long int
using namespace std;
const int MAXn = 1e6 + 9; // 10000: 104729
bitset<MAXn> ved;
vector<lli> prime;
int main() {
lli n;
scanf("%lld", &n);
for(int i = 2; i <= MAXn - 3; i ++) {
if(!ved[i]) prime.push_back(i);
for(lli pj : prime) {
if(i * pj > MAXn - 3) break;
ved[i * pj] = 1;
if(i % pj == 0) break;
}
}
printf("%lld", prime[n - 1]);
return 0;
}
|