#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define NUM 10001
#define DST 100
void
primeVector(vector<bool> *pv_table)
{
pv_table->at(0) = pv_table->at(1) = false;
for (vector<bool>::size_type i = 2, end = (vector<bool>::size_type)ceil(sqrt((double)(pv_table->size()))); i < end; i++)
{
if (pv_table->at(i))
{
for (vector<bool>::size_type j = i+i, endJ = pv_table->size(); j < endJ; j+=i)
{
pv_table->at(j) = false;
}
}
}
}
int
findPrime(vector<bool> *pv_table)
{
vector<bool>::size_type st = pv_table->size();
pv_table->resize(st+DST);
for (vector<bool>::size_type i = 0; i < DST; i++)
{
pv_table->at(st+i) = true;
}
primeVector(pv_table);
int num = 0;
for (vector<bool>::size_type i = 0; i < pv_table->size(); i++)
{
if(pv_table->at(i))
{
num++;
}
else
{
}
}
if (num < NUM)
{
findPrime(pv_table);
return num;
}
else
{
return num;
}
}
int
main(int argc, char ** argv)
{
vector<bool> v_table, v_prime;
findPrime(&v_table);
int count = 1;
for (vector<bool>::size_type i = 0, end = v_table.size(); i < end; i++)
{
if(v_table[i])
{
if (count++ == NUM)
cout << i << endl;
}
}
return 0;
}