Pagini recente » Cod sursa (job #946900) | Cod sursa (job #1515168) | Cod sursa (job #678409) | Cod sursa (job #1044833) | Cod sursa (job #981123)
Cod sursa(job #981123)
#include <stdio.h>
#include <math.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, sqrtn;
register int i, j, step;
register int prime_numbers = 0;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
sqrtn = 1 + (int) sqrt(N);
// 2 is a prime number
++prime_numbers;
for (i = 3; i <= N; i += 2)
if (!GET_INDEX(i)) {
++prime_numbers;
step = i << 1;
for (j = i + step; j <= sqrtn; j += step)
SET_INDEX_TRUE(j);
}
printf("%d", prime_numbers);
return 0;
}