Cod sursa(job #436151)

Utilizator alexandru92alexandru alexandru92 Data 8 aprilie 2010 08:11:11
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
/* 
 * File:   main.cpp
 * Author: VirtualDemon
 *
 * Created on April 8, 2010, 8:06 AM
 */
#include <cstdlib>
#include <fstream>
#define Nmax 125001

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