Cod sursa(job #2002992)

Utilizator gluonIancu Codarascu gluon Data 21 iulie 2017 13:36:36
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.6 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 * i <= N; i++) {
		if(!isMarked(i)) {
			for(int j = i * i; j <= N; j += i) {
				mark(j);
			}
		}
	}

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

	printf("%d\n", contor);

	return 0;
}