Cod sursa(job #323182)
Utilizator | alexandru alexandru92 | Data | 11 iunie 2009 09:22:52 |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.5 kb |
/* */
#include<stdio.h>
#include<stdlib.h>
char *v;
int n,nr=1;
int main()
{register int i,j;
freopen("ciur.in","rt",stdin);
freopen("ciur.out","wt",stdout);
scanf("%d",&n);
v=(char*)calloc(n/2/8+1,sizeof(char));
for(i=1;((i*i)<<1)+(i<<1)<=n;++i)
if((v[i>>3]&(1<<(i&7)))==0)
for(j=((i*i)<<1)+(i<<1);(j<<1)+1<=n;j+=(i<<1)+1) v[j>>3]|=(1<<(j&7));
for(i=1;2*i+1<=n;++i)
if((v[i>>3]&(1<<(i&7)))==0) ++nr;
printf("%d",nr);
free(v);
return 0;
}