Cod sursa(job #162167)

Utilizator reSpawnPopescu Ioan reSpawn Data 19 martie 2008 16:35:43
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.48 kb
#include <stdio.h>

const int MAXSIZE = 2000000/2+1;
char p[MAXSIZE];

//p[i] == 0 if 2*i + 1 is prime
int ciur( int n )
{
	int i, j, nr = 1;
	for( i = 1; (2*i*i + 2*i) <= n; ++i )
		if(p[i] == 0)
			for( j = (2*i*i + 2*i); 2*j + 1 <= n; j+= 2*i + 1 )
				p[j] = 1;

	for ( i=1; 2 * i + 1 <= n; ++i) 
		if (p[i] == 0) nr++;
	return nr;
}

int main()
{
	freopen( "ciur.in", "r", stdin );
	freopen( "ciur.out", "w", stdout );
	int n;
	scanf( "%d", &n );
	printf("%d", ciur( n ) );

	return 0;
}