Pagini recente » Cod sursa (job #953249) | Cod sursa (job #1091748) | Cod sursa (job #3290245) | Cod sursa (job #3132000) | Cod sursa (job #2432472)
#include <stdio.h>
#include <assert.h>
int sieve(int &n) {
unsigned char sieve[n / 8 + 1] = {0};
int counter = 0;
for (int i = 2 ; i <= n ; ++i) {
int byte = i / 8;
int bit = i % 8;
if ((sieve[byte] & (1 << bit)) == 0) {
++counter;
for (int j = 2 * i ; j <= n ; j += i) {
int byte = j / 8;
int bit = j % 8;
sieve[byte] |= (1 << bit);
}
}
}
return counter;
}
int main() {
int n, counter;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &n);
assert(2 <= n && n <= 2000000);
printf("%d\n", sieve(n));
return 0;
}