Cod sursa(job #365824)

Utilizator cristianalex81Cristian Alexandru cristianalex81 Data 20 noiembrie 2009 00:18:19
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <cstdio>
#define MAX 2000001

bool p[MAX];
// p[i]==false daca 2*i+1 e prim
int n;
int main()
{
	int i,j,ct=0;
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	scanf("%d",&n);
	if (n>=1)	
		ct++;
		//printf("%d ",1);		
	if (n>=2)
		ct++;
		//printf("%d ",2);
	if (n>2)
		for (i=1;((i*i)<<2)+(i<<1)<=n;i+=1)
			if(!p[i])							
				for (j=((i*i)<<1)+(i<<1);(j<<1)+1<=n;j+=(i<<1)+1)
					p[j]=true;
	for (i=1;2*i+1<=n;++i)
		if(!p[i])
			ct++;
			//printf("%d ",2*i+1);	
	printf("%d\n",ct-1);
	return 0;
}