Cod sursa(job #459941)

Utilizator BitOneSAlexandru BitOne Data 31 mai 2010 17:53:08
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdlib>
#include <fstream>
#define Nmax 125001

/*
 *
 */
using namespace std;
char isPrime[Nmax];
int main( void )
{
    int N, i, j, nr, count;
    ifstream in( "ciur.in" );
    in>>N;
    for( i=1; ( (i*i)<<1 )+ ( i<<1 ) < N; ++i )
        if( 0 == ( isPrime[ i>>3 ] & ( 1<<(i&7) ) ) )
        {
            count=(i<<1)+1;
            for( j=( (i*i)<<1 )+( i<<1 ); j<<1 < N; j+=count )
                isPrime[ j>>3 ]|=( 1<<(j&7) );
        }
    for( i=3, nr=1; i <= N; i+=2 )
        if( 0 == ( isPrime[ ( i-1 )>>4 ] & ( 1<<( ( ( i-1 )>>1 ) & 7 ) ) ) )
            ++nr;
    ofstream out( "ciur.out" );
    out<<nr<<'\n';
    return EXIT_SUCCESS;
}