Pagini recente » Cod sursa (job #1442326) | Cod sursa (job #2250531) | Cod sursa (job #87745) | Cod sursa (job #2700768) | Cod sursa (job #981031)
Cod sursa(job #981031)
#include <stdio.h>
#include <math.h>
#define MAXSIZE 2000001
char primes[MAXSIZE];
int is_prime(int a)
{
int i;
int sqr;
if (a < 2) return 0;
if (a == 2) return 1;
// besides 2, even numbers can not be prime
if (a % 2 == 0) return 0;
sqr = (int) sqrt((double)a);
for (i = 3; i <= sqr; i += 2)
if (a % i == 0) return 0;
return 1;
}
int ciur_1(int n)
{
int i;
int nprimes = 0;
for (i = 2; i <= n; ++i)
if (is_prime(i)) ++nprimes;
return nprimes;
}
void init_primes(int n)
{
int i;
primes[2] = 1;
for (i = 3; i <= n; i += 2)
primes[i] = 1;
}
int get_number_of_prime_numbers(int n)
{
int i;
int nr = 0;
for (i = 2; i <= n; ++i)
if (primes[i]) ++nr;
return nr;
}
int ciur_2(int n)
{
int i, j;
init_primes(n);
for (i = 2; i <= n; ++i)
if (primes[i])
for (j = 2 * i; j <= n; j += i)
primes[j] = 0;
return get_number_of_prime_numbers(n);
}
int ciur_3(int n)
{
int i, j;
init_primes(n);
for (i = 3; i <= n; ++i)
if (primes[i])
for (j = 2 * i; j <= n; j += (2 * i))
primes[j] = 0;
return get_number_of_prime_numbers(n);
}
int main()
{
int N;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
printf("%d\n", ciur_3(N));
return 0;
}