/*
* 输出第k个质数(质数筛法)
*/
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 1e5;
bool isPrime[MAXN]; //标记数组
vector<int> prime; //保存质数
void initial(){ //初始化
fill(isPrime,isPrime+MAXN,true);
isPrime[0]=false;
isPrime[1]=false;
for(int i = 2;i<MAXN;i++){
if(!isPrime[i]){ //非质数,则跳过该数
continue;
}
prime.push_back(i);
for(int j = i+i;j<MAXN;j+=i){
isPrime[j]=false; //质数的倍数为非质数
}
}
return;
}
int main(){
initial();
int k;
while(scanf("%d",&k)!=EOF){
printf("%d\n",prime[k-1]);
}
return 0;
}