Cod sursa(job #523213)

Utilizator BitOneSAlexandru BitOne Data 17 ianuarie 2011 14:24:58
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
/* 
 * File:   main.cpp
 * Author: salexandru
 *
 * Created on January 17, 2011, 2:16 PM
 */
#include <fstream>
#include <cstdlib>
#define N_MAX  (2000000>>4)+1

using namespace std;

/*
 * 
 */
int isPrime[N_MAX];
int main(int argc, char** argv)
{
    int N, i, j, add;
    ifstream in( "ciur.in" );
    in>>N;
    for( i=1; ((i*i)<<1)+(i<<1) < N; ++i )
        if( 0 == ( isPrime[i>>3] & (1<<(i&7)) ) )
        {
            add=i<<1;
            for( j=((i*i)<<1)+(i<<1); (j<<1) < N; j+=add )
                isPrime[j>>3]|=1<<(j&7);
        }
    for( j=1, i=3; i <= N; i+=2 )
    {
        add=(i-1)>>1;
        if( 0 == ( isPrime[add>>3] & (1<<(add&7)) ) )
            ++j;
    }
    ofstream out( "ciur.out" );
    out<<j<<'\n';
    return 0;
}