Cod sursa(job #1756524)

Utilizator Luncasu_VictorVictor Luncasu Luncasu_Victor Data 12 septembrie 2016 23:37:48
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>	
#include <cstdio>
#include <vector>
#include <stack>
#include <cassert>
using namespace std;

class Ciur {
 public:
	Ciur(int max_value) : max_value_(max_value) {
		is_prime_.resize(max_value_ + 1, true);
	}
	void FindPrimes() {
		int i = 2;
		while (i * i <= max_value_) {
			while (!is_prime_[i]) ++i;
			for (int j = i * i; j <= max_value_; j += i) is_prime_[j] = false;
			++i;
		}
	}
	bool IsPrime(int x) {
		assert(x > 0 && x <= max_value_);
		return is_prime_[x];
	}
 private:
	vector<bool> is_prime_;
	int max_value_;
};

int main() {
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	int n;
	scanf("%d", &n);
	Ciur *instance = new Ciur(n);
	instance->FindPrimes();
	int count = 0;
	for (int i = 2; i <= n; ++i) {
		count += instance->IsPrime(i);
	}
	printf("%d\n", count);
	return 0;
}