Cod sursa(job #465218)

Utilizator nickyyLal Daniel Emanuel nickyy Data 23 iunie 2010 17:41:36
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include <stdio.h>
#define nmax 2000001
using namespace std;
char p[nmax];
int n;

	int ciur(void)
	{int i,j,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;(i<<1)+1<=n;i++) 
		 if((p[i>>3]& (1<<(i&7)))==0) nr++;
	 return nr;
	}
	
int main(void)
{FILE *fin=fopen("ciur.in","r");
 FILE *fout=fopen("ciur.out","w");
 fscanf(fin,"%d",&n);
 fprintf(fout,"%d",ciur());
 fclose(fin); fclose(fout);
 return 0;
}