Cod sursa(job #232244)
| Utilizator | 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;
}
