#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
//怎么知道要开辟多大空间才能容纳下10000个质数?
//一种方法,百度搜索,预先知道是十万多
//这种方法给人的感觉非常难受!
//试一下放弃筛法,寻找当前质因数,会有多慢
//强的一笔,不是很慢,简单易懂
void Outputkthprime(int k){
if(k<1 || k>10000){
printf("Error!\n");
exit(0);
}
if(k==1){
printf("2\n");
return;
}
vector<int> v;
v.push_back(2);
for(int i=3; 1; i++){
for(int j=0; j<v.size(); j++){
if(v[j]>sqrt(i)){//发现i幸存,即i是质数
v.push_back(i);
if(v.size()==k){
printf("%d\n",v[v.size()-1]);
return;
}
break;
}
if(i%v[j] == 0){//发现i是合数
break;
}
}
}
}
int main(){
int k;
while(scanf("%d",&k) != EOF){
Outputkthprime(k);
}
return 0;
}