Cod sursa(job #232244)

Utilizator cotofanaCotofana Cristian cotofana Data 14 decembrie 2008 22:26:27
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.47 kb
#include <stdio.h>
#define dim 2000000/2/8+1

long n, nr, p[dim];

int main()
{
	long i, j;
	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);
	scanf("%ld\n", &n);
	nr=1;
	for (i=1; ((i*i)<<1)+(i<<1)<=n; i++)
	{
		if ((p[i>>3]&(1<<(i&7)))==0)
		{
			for (j=((i*i)<<1)+(i<<1); (j<<1)+1<=n; j+=(i<<1)+1)
			{
				p[j>>3]|=(1<<(j&7));
			}
		}
	}
	for (i=1; 2*i+1<=n; i++)
		if ((p[i>>3]&(1<<(i&7)))==0) nr++;
	printf("%ld\n", nr);
	return 0;
}