pat 1059
#include <iostream>
#include <vector>
using namespace std;
vector<int>prime; //存放找到的所有的质数
const int MAXN=1e5+10;
bool Isprime[MAXN];
void Inital(){ //初始化素数表
fill(Isprime,Isprime+MAXN,true);
Isprime[0]=Isprime[1]=false; //0和1不是素数,置为flase
for(int i=2;i<MAXN;++i){
if(Isprime[i]==false) continue; //不是素数,跳过
prime.push_back(i); //如果i不是素数,在i之前的质数的倍数会被筛掉
if(i>MAXN/i) continue; //maxn内的质数已经筛完
for(int j=i*i;j<MAXN;j+=i) //一旦这个数是质数,把他的倍数定义为非质数(合数的倍数也是其质因子的倍数,所有合数都是质数的倍数)
Isprime[j]=false;
}
}
int main() {
int k;
Inital();
while(scanf("%d",&k)!=EOF){
printf("%d\n",prime[k-1]); //输出第k个质数
}
system("pause");
return 0;
}