Cod sursa(job #514276)
Utilizator | Z.Z.Daniel blastoise | Data | 18 decembrie 2010 12:09:52 |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.42 kb |
#include <stdio.h>
int i,j,N,sol;
char p[125010];
int main()
{
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
scanf("%d",&N);
for(i=1;(((i*i)<<2)+(i<<2)+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));
sol=1;
for(i=1;((i<<1)+1)<=N;i++)
if((p[i>>3]&(1<<(i&7)))==0) sol++;
printf("%d\n",sol);
return 0;
}