#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define NUM 2000000
#define DST 100000
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 max = -1;
for (vector<bool>::size_type i = pv_table->size()-1; i > 0; i--)
{
if(pv_table->at(i))
{
max = i;
break;
}
}
if (max < NUM)
{
findPrime(pv_table);
return max;
}
else
{
return max;
}
}
int
main(int argc, char ** argv)
{
vector<bool> v_table, v_prime;
findPrime(&v_table);
long long sum = 0;
for (vector<bool>::size_type i = 0, end = v_table.size(); i < end; i++)
{
if(v_table[i])
{
if (i > NUM)
{
break;
}
sum += i;
}
}
cout << sum << endl;
return 0;
}