Cod sursa(job #631085)

Utilizator SimeneSimene Robert Simene Data 6 noiembrie 2011 21:50:51
Problema Ciurul lui Eratosthenes Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>

using namespace std;

const int MAX_N = 100002;
char sievel[ MAX_N ];
int N;

int getTheNumber()
{
    int i, j, number = 1;

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

    for( i = 1 ; 2 * i + 1 <= N ; ++i )
    {
        if( sievel[ i >> 3 ] & ( 1 << ( i & 7) ) )
            continue;
        number ++;
    }

    return number;

}

int main()
{
    freopen( "ciur.in", "r", stdin );
    freopen( "ciur.out", "w", stdout );

    scanf( "%d", &N );
    printf( "%d\n", getTheNumber() );

    fclose(stdin);
    fclose(stdout);
    return 0;
}