Pagini recente » Cod sursa (job #2633306) | Cod sursa (job #2392775) | Cod sursa (job #1789489) | Cod sursa (job #2831097) | Cod sursa (job #1756524)
#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;
}