Cod sursa(job #471008)

Utilizator SpiderManSimoiu Robert SpiderMan Data 16 iulie 2010 15:21:30
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

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

unsigned char 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;
}