Cod sursa(job #2002984)

Utilizator gluonIancu Codarascu gluon 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;
}