Pagini recente » Cod sursa (job #2945707) | Profil aIexpetrescu | Cod sursa (job #2743129) | Cod sursa (job #145429) | Cod sursa (job #1511253)
#include <cstdio>
FILE *f = fopen ( "ciur.in" , "r" ) , *g = fopen ( "ciur.out" , "w" );
const long long limit = 2000005;
long long N , number , primeNr , x;
bool isNotPrime[limit];
void sieve()
{
//2 is the only even prime number
primeNr = 1;
//isNotPrime [ number ] = False if ( 2 * number + 1 ) is prime and True otherwise
for ( number = 1 ; ( number << 1 ) + 1 <= N ; number ++ )
if ( !isNotPrime [ number ] )
{
//number is prime
primeNr ++;
//mark all multiples of number as non-prime
for ( x = ( ( number * number ) << 1 ) + ( number << 1 ) ; ( x << 1 ) + 1 <= N ; x += ( number << 1 ) + 1 )
isNotPrime [ x ] = true;
}
}
int main()
{
//read
fscanf ( f , "%lld" , &N );
sieve();
//print
fprintf ( g , "%lld\n" , primeNr );
return 0;
}