Cod sursa(job #341806)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
#define mp make_pair
#define pb push_back
#define sz(c) (int)((c).size())
#define f first
#define s second
#define fin "ciur.in"
#define fout "ciur.out"
#define NMAX 2000001
#define pos(x,tmp) ( tmp = (( (x)/2 - 1 ) / 32) )
int N;
int v[NMAX/64];
int main()
{
int i, j, count = 1, tmp, rem = 0;
ifstream f(fin);
ofstream f2(fout);
f >> N;
memset(v,0,sizeof(v));
for ( i = 3; i <= N; i += 2 )
{
if ( (v[ pos(i,rem) ] & ( 1 << ( (i >> 1) - 1 - (rem << 5) ))) == 0 )
{
++count;
for ( j = (tmp = (i << 1)) + i; j <= N; j += tmp )
v[ pos(j,rem) ] |= ( 1 << ( (j >> 1) - 1 - (rem << 5) ));
}
}
f2 << count << endl;
return 0;
}