Cod sursa(job #341806)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 19 august 2009 16:37:32
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#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;
}