输出从小到大的第 k 个质数。
输入格式
输入包含多组数据。
每组数据一行,一个整数 k。
输出格式
每组数据输出占一行,输出第 k 个质数。
数据范围
1≤k≤10000,
每个输入最多包含 100 组数据。
输入样例:
3
7
输出样例:
5
17
代码如下:
①朴素筛法:
#include<iostream>
const int N = 1.5e5;
int prime[N];
int cnt;
bool st[N];
void get_prime(){
for(int i = 2; i <= N; i ++){
if(st[i]) continue;
prime[cnt++] = i;
for(int j = i * 2; j <= N; j += i){
st[j] = true;
}
}
}
int main(){
get_prime();
int x;
while(std::cin >> x){
std::cout << prime[x - 1] << std::endl;
}
return 0;
}
②线性筛法:
#include<iostream>
#include<cstring>
const int N = 1.5e5;
int prime[N];
int cnt;
bool st[N];
void get_prime(int n){
for(int i = 2; i <= n; i ++){
if(!st[i]) prime[cnt ++] = i;
for(int j = 0; prime[j] <= n / i; j ++){
st[i * prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
}
int main(){
std::ios::sync_with_stdio(false);
std::cout.tie(NULL);
memset(st, false, sizeof(st));
get_prime(N);
int k;
while(std::cin >> k){
std::cout << prime[k - 1] << std::endl;
}
return 0;
}