Cod sursa(job #2002985)

Utilizator gluonIancu Codarascu gluon Data 21 iulie 2017 13:24:56
Problema Ciurul lui Eratosthenes Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 0.54 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() {
	int contor = 0;

	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);

	scanf("%d", &N);

	for(int i = 2; i < N; i++) {
		if(!isMarked(i)) {
			contor++;

			for(int j = i * i; j <= N; j += i) {
				mark(j);
			}
		}
	}

	printf("%d\n", contor);
	
	return 0;
}