Cod sursa(job #1448088)

Utilizator andreipnAndrei Petre andreipn Data 6 iunie 2015 09:20:43
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.69 kb
// http://www.infoarena.ro/problema/ciur

#include <stdio.h>

#define MAX_N 2000001

int prime_numbers(int N) {
	char hash[MAX_N] = {0};
	int i, prime_numbers = 0;

	for (i = 2; i <= N; ++i) {
		// means it's not prime, has been marked with
		// eratosthene.
		if (hash[i] == 1)
			continue;
		prime_numbers++;
		// Mark all multipliers of i as not prime.
		int j = 2, multiplier = j * i;
		while (multiplier <= N) {
			hash[multiplier] = 1;
			j++;
			multiplier = j * i;
		}
	}
	return prime_numbers;
}

int main() {
	FILE *in = fopen("ciur.in", "r"),
	     *out = fopen("ciur.out", "w");
	int N;

	fscanf(in, "%d", &N);
	fprintf(out, "%d", prime_numbers(N));

	fclose(in);
	fclose(out);
	return 0;
}