Cod sursa(job #1511253)

Utilizator jimcarterJim Carter jimcarter Data 26 octombrie 2015 11:34:29
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

FILE *f = fopen ( "ciur.in" , "r" ) , *g = fopen ( "ciur.out" , "w" );

const long long limit = 2000005;
long long N , number , primeNr , x;
bool isNotPrime[limit];

void sieve()
{
    //2 is the only even prime number
    primeNr = 1;
    //isNotPrime [ number ] = False if ( 2 * number + 1 ) is prime and True otherwise
    for ( number = 1 ; ( number << 1 ) + 1 <= N ; number ++ )
        if ( !isNotPrime [ number ] )
        {
            //number is prime
            primeNr ++;
            //mark all multiples of number as non-prime
            for ( x = ( ( number * number ) << 1 ) + ( number << 1 ) ; ( x << 1 ) + 1 <= N ; x += ( number << 1 ) + 1 )
                isNotPrime [ x ] = true;
        }
}


int main()
{
    //read
    fscanf ( f , "%lld" , &N );

    sieve();
    //print
    fprintf ( g , "%lld\n" , primeNr );
    return 0;
}