Cod sursa(job #797808)

Utilizator catalinb91Catalin Badea catalinb91 Data 14 octombrie 2012 22:00:04
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <iostream>
#include <fstream>

std::ifstream input("ciur.in");
std::ofstream output("ciur.out");

#define SIZE 2000000
#define MARKED 42
char base[SIZE];

int main() {
	int n;
	input >> n;
	base[0] = MARKED;
	base[1] = MARKED;

	for (int i = 0; i < n; i++) {
		if (base[i] == MARKED)
			continue;

		long current = i;
		long current_position = current * current;
		if (current_position > n)
			break;

		while (current_position < n) {
			base[current_position] = MARKED;
			current_position += current;
		}
	}

	long count = 0;
	for (int i = 0; i < n; i++) {
		if (base[i] != MARKED)
			count++;
	}
	output << count;
}