Cod sursa(job #326481)

Utilizator IoannaPandele Ioana Ioanna Data 25 iunie 2009 12:46:35
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<stdio.h>
#include<math.h>
#define nmax 2000000
#define dmax (nmax>>4)+1
unsigned char p[dmax];
long n;

void read()
{
scanf("%ld",&n);
}

void ciur()
{
long i,j;
long lim;
lim=sqrt(n)+1;
for (i=1;(i<<1)+1<=lim;i++)
    {
     if (!(p[i>>3] & (1<<(i&7))))
         for (j=(i<<1)+(i*i<<1);(j<<1)+1<=n;j=j+(i<<1)+1)
             {
              p[j>>3]=p[j>>3] | (1<<(j&7));
             }
    }
}

void numara()
{
long i,nr=1;
for (i=3;i<=n;i+=2)
    {
     if (!(p[i>>4] & (1<<((i>>1)&7))))
         nr++;
    }
printf("%ld",nr);
}

int main()
{
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
read();
ciur();
numara();
return 0;
}