Pagini recente » Cod sursa (job #2956004) | Cod sursa (job #2481146) | Cod sursa (job #502493) | Cod sursa (job #2904174) | Cod sursa (job #981085)
Cod sursa(job #981085)
#include <stdio.h>
#define MAXSIZE (2 << 18)
#define GET_INDEX(i) (primes[(i/8)] & (1 << (i%8)))
#define SET_INDEX_TRUE(i) (primes[(i/8)] = (primes[(i/8)] | (1 << (i%8))))
#define SET_INDEX_FALSE(i) (primes[(i/8)] = (primes[(i/8)] & ~(1 << (i%8))))
unsigned char primes[MAXSIZE];
int main()
{
int N;
int i, j, step;
int prime_numbers = 0;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
SET_INDEX_TRUE(2);
for (i = 3; i <= N; i += 2)
SET_INDEX_TRUE(i);
for (i = 3; i <= N; i += 2)
if (GET_INDEX(i))
for (j = i + (step = 2 * i); j <= N; j += step)
SET_INDEX_FALSE(j);
++prime_numbers;
for (i = 3; i <= N; i += 2)
if (GET_INDEX(i)) ++prime_numbers;
printf("%d", prime_numbers);
return 0;
}