Pagini recente » Cod sursa (job #2688893) | Cod sursa (job #3267267) | Cod sursa (job #1419665) | Cod sursa (job #1425212) | Cod sursa (job #2524998)
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
const std::string kInputFileName = "ciur.in";
const std::string kOutputFileName = "ciur.out";
class PrimeFinder {
public:
explicit PrimeFinder(int n) : n_(n) {}
int GetNumPrimesBelow() const {
std::vector<bool> sieve(n_ + 1, true);
sieve[0] = sieve[1] = false;
for (int i = 4; i <= n_; i += 2) {
sieve[i] = false;
}
for (int i = 3; i * i <= n_; i += 2) {
for (int j = i * i; j <= n_; j += i) {
sieve[j] = false;
}
}
return std::count_if(sieve.begin(), sieve.end(),
[](const bool& val) { return val; });
}
private:
const int n_;
};
int main() {
std::ifstream fin(kInputFileName);
std::ofstream fout(kOutputFileName);
int n;
fin >> n;
fout << PrimeFinder(n).GetNumPrimesBelow();
return 0;
}