Cod sursa(job #420348)

Utilizator alexandru92alexandru alexandru92 Data 18 martie 2010 20:30:34
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on March 18, 2010, 3:57 PM
 */
#include <cstdio>

/*
 *
 */
using namespace std;
char is_prime[ 125001 ];
int main( void )
{
    int N, i, j, nr=1;
    fscanf( fopen( "ciur.in", "rt" ), "%d", &N );
    for( i=1; ((i*i)<<1)+(i<<1) <= N; ++i )
        if( 0 == ( is_prime[i>>3] & ( 1<<(i&7)) ) )
            for( j=((i*i)<<1)+(i<<1); (j<<1)+1 <= N; j+=(i<<1)+1 )
                is_prime[j>>3]|=(1<<(j&7));
    for( i=1; (i<<1)+1 <= N; ++i )
        if( 0 == ( is_prime[i>>3] & (1<<(i&7) ) ) )
            ++nr;
    fprintf( fopen("ciur.out", "wt" ), "%d", nr );
    return 0;
}