Cod sursa(job #463511)

Utilizator SpiderManSimoiu Robert SpiderMan Data 16 iunie 2010 10:47:36
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>

const char FIN[] = "ciur.in", FOU[] = "ciur.out";
const int MAX = 1 << 17;

short V[MAX];
int N ;

int main ()
{
    freopen ( FIN, "r", stdin );
    freopen ( FOU, "w", stdout );

    scanf("%d", &N);

    for (int i = 1; ( i * i << 1 ) + ( i << 1 ) <= N; ++i)
    {
        if ( ( V[i >> 3] & ( 1 << ( i & 7 ) ) ) ) continue;
            for (int j = ( i * i << 1 ) + ( i << 1 ); ( j << 1 ) + 1 <= N; j += ( i << 1 ) + 1)
                V[j >> 3] |= ( 1 << ( j & 7 ) );


    }

    int sol = 1;

    for (int i = 1; ( i << 1 ) + 1 <= N; ++i)
        if ( ( V[i >> 3] & ( 1 << ( i & 7 ) ) ) == 0 )
            sol++;


    printf("%d\n", sol);

    return 0;
}