Cod sursa(job #2002984)
| Utilizator | Data | 21 iulie 2017 13:21:52 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 0 |
| Compilator | c | Status | done |
| Runda | Arhiva educationala | Marime | 0.5 kb |
#include <stdio.h>
#include <stdlib.h>
int N;
#define N_MAX 2000000 / 32 + 1
int a[N_MAX];
void mark(int k) {
a[k / 32] = a[k / 32] | (1 << (k % 32));
}
int isMarked(int k) {
int index = a[k / 32];
int mask = index & (1 << (k % 32));
return mask != 0;
}
int main() {
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
for(int i = 2; i < N; i++) {
if(!isMarked(i)) {
printf("%d ", i);
for(int j = i * i; j <= N; j += i) {
mark(j);
}
}
}
return 0;
}