Cod sursa(job #1317848)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 15 ianuarie 2015 11:47:56
Problema Ciurul lui Eratosthenes Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>

using namespace std;

#define MAX_N 2000000

FILE *f;
inline int ciur( const int &N ) {
    char ciur[ MAX_N >> 1 ];
    int count = 1, i, j, k, l;
    k = 1;
    for( i = 3; i * i <= N; i += 2 ) {
        if( !ciur[ k ] ) {
            ++count;
            l = ( i * i ) >> 1;
            for( j = l << 1; j <= N; j += i ) {
                ciur[ l ] = 1;
                l += i;
            }
        }
        ++k;
    }
    for( ; i <= N; i += 2 ) {
        if( !ciur[ k ] )
            ++count;
        ++k;
    }
    return count;
}
int main() {
    int N;
    f = fopen( "ciur.in", "r" );
    fscanf( f, "%d", &N );
    fclose( f );
    f = fopen( "ciur.out", "w" );
    fprintf( f, "%d\n", ciur( N ) );
    fclose( f );
    return 0;
}