#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。