Cod sursa(job #2524998)

Utilizator greenadexIulia Harasim greenadex Data 16 ianuarie 2020 18:01:15
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#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;
}