Cod sursa(job #940325)

Utilizator nicknameLare Nicu nickname Data 16 aprilie 2013 00:31:32
Problema Ciurul lui Eratosthenes Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.57 kb
#include <stdio.h>
#include <math.h>

#define N 2000001

int main() {
	FILE* in = fopen("ciur.in", "r");
	FILE* out = fopen("ciur.out", "w");
	int n;
	fscanf(in, "%d", &n);
	char ciur[N];
	ciur[2] = 1;
	int i;
	for (i = 3; i <= n; ++i)
		if (i % 2 == 0)
			ciur[i] = 0;
		else
			ciur[i] = 1;
	int crtNum = 3;
	while (crtNum <= n/2) {
		int crtMultiple = crtNum * 2;
		while (crtMultiple <= n) {
			ciur[crtMultiple] = 0;
			crtMultiple += crtNum;
		}
		while(ciur[crtNum++] == 0);
	}
	int sum = 0;
	for (i = 2; i <= n; ++i)
		sum += ciur[i];
	fprintf(out, "%d\n", sum);
	return 0;
}