Cod sursa(job #1996626)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 2 iulie 2017 09:14:43
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

pair<vector<int>, vector<int>> Sieve(int n) {
    vector<int> primes;
    vector<int> divisor(n + 1);
    for (int i = 2; i <= n; ++i) {
        if (divisor[i] == 0) {
            primes.push_back(i);
            divisor[i] = (int)primes.size();
        }
        for (int j = 0; j < (int)primes.size() && j < divisor[i] && primes[j] * i <= n; ++j) {
            divisor[primes[j] * i] = j + 1;
        }
    }
    return make_pair(primes, divisor);
}

int main() {
#ifdef INFOARENA
    ifstream cin("ciur.in");
    ofstream cout("ciur.out");
#endif
    int n; cin >> n;
    cout << Sieve(n).first.size() << '\n';
}