#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int N=5e5+10;
bool st[N];
vector<int> prime;
void get_primes(int x)
{
for(int i=2;i<=x;++i)
{
if(!st[i])
{
prime.push_back(i);
for(int j=i+i;j<=x;j+=i)
st[j]=true;
}
}
}
int main()
{
get_primes(N);
int k;
while(~scanf("%d",&k))
{
printf("%d\n",prime[k-1]);
}
return 0;
}
因为需要多组输入,所以用素数筛。试除法判断质数每次需要判断10000次,不清楚一共有多少组输入,故不采用试除法。
素数筛需要判断筛多少以内的质数,给定k最大为10000,假设没100个数里面只有10个质数(以100为例,远超10个),那么10000个质数需要到1e5,保险起见开5e5。

京公网安备 11010502036488号