Cod sursa(job #965033)

Utilizator gabrieligabrieli gabrieli Data 22 iunie 2013 23:49:07
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
//BEGIN CUT
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
//END CUT
struct Sieve {
	size_t upper_limit, nr_primes;
	vector<bool> prime;

	Sieve(size_t limit) : upper_limit(limit), nr_primes(1), prime(limit, true) {
		prime[0] = prime[1] = false;
		for (size_t i = 3; i*i <= upper_limit; i += 2)
			if (prime[i])
				for (size_t j = i*i; j <= upper_limit; j += 2*i)
					prime[j] = false;

		for (size_t i = 3; i <= upper_limit; i += 2)
			if (prime[i]) nr_primes++;
	}
};
//BEGIN CUT
int main() {
	ifstream fin ("ciur.in");
	ofstream fout ("ciur.out");

	int n;
	fin >> n;

	Sieve sieve(n);
	fout << sieve.nr_primes << endl;

	fout.close();
	return 0;
}
//END CUT