Cod sursa(job #523222)

Utilizator cocoshilaClaudiu cocoshila Data 17 ianuarie 2011 15:13:02
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <cstring>
#include <cstdio> 
#define VALUE(i) (((v[i/32])>>(i%32))&1)
 
int main()
{
    freopen ("ciur.in","r",stdin);
    freopen ("ciur.out","w",stdout);
    int N;
 
    scanf ("%d",&N);
    int rez = 1;
    int *v = new int[N/32+1];  
    memset(v,0,sizeof(int)*(N/32+1));
    bool stop = false;
 
    for (int i=3;i<=N;i+=2)
        if (!VALUE(i))
        {
            rez++;
            if (stop) continue;
            if (i*i > N) stop = true;
 
            for (int j=i*i;j<=N;j+=i<<1)
                v[j/32] |= 1<<(j%32);
        }
    delete v;
 
    printf ("%d\n",rez);
    return 0;
}