Cod sursa(job #672791)

Utilizator BitOneSAlexandru BitOne Data 3 februarie 2012 09:32:51
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.53 kb
#include <fstream>
#include <cstdlib>
#define N_MAX (2000000>>4)+1


using namespace std;

char isPrime[N_MAX];
int main()
{
	int N, i, j, k, count;
	ifstream in( "ciur.in" );
	ofstream out( "ciur.out" );
	
	in>>N;
	for( i=1; ((i*i)<<1)+(i<<1) < N; ++i )
		if( 0 == ( isPrime[i>>3] & (1<<(i&7)) ) )
		{
			k=(i<<1)+1;
			for( j=((i*i)<<1)+(i<<1); (j<<1) < N; j+=k )
				isPrime[j>>3]|=1<<(j&7);
		}
	for( count=1, i=1, j=3; j <= N; ++i, j+=2 )
		if(  0 == ( isPrime[i>>3] & (1<<(i&7)) ) )
			++count;
	out<<count<<'\n';
	return EXIT_SUCCESS;
}