Cod sursa(job #582044)

Utilizator BitOneSAlexandru BitOne Data 14 aprilie 2011 20:21:35
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>
#include <cstdlib>
#define N_MAX 2000000/16+1

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