Cod sursa(job #2606694)

Utilizator lev.tempfliTempfli Levente lev.tempfli Data 28 aprilie 2020 11:46:40
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <vector>

class Eras_sieve {
public:
    explicit Eras_sieve(int nn, bool gen_now = 1) : n(nn) {
        primes.resize(n + 1, 1);
        if (gen_now) generate();
    }

    bool isPrime(int i) {
        return primes[i];
    }

private:
    void generate() {
        primes[0] = false;
        primes[1] = false;
        for (int i = 2; i <= n; i++) {
            if (primes[i]) {
                for (int j = 2 * i; j <= n; j += i)
                    primes[j] = false;
            }
        }
    }

    int n;
    std::vector<bool> primes;
};

int main() {
    std::ifstream fin("ciur.in");
    std::ofstream fout("ciur.out");
    int n;
    fin >> n;

    Eras_sieve ciur(n);

    int k = 0;
    for (int i = 2; i <= n; i++)
        if (ciur.isPrime(i)) k++;

    fout<< k;
}