Cod sursa(job #2215465)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 22 iunie 2018 11:48:48
Problema Ciurul lui Eratosthenes Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ciur.in");
ofstream fout ("ciur.out");
int nprime, n;
vector <int> primes;
int least [2000009];
bool f [2000009];
void E1 (void){
    for (int i = 2; i <= n; i ++){
        if (least [i] == 0) {
            primes.push_back (i);
            least [i] = i;
        }
        for (int j = 0; primes [j] <= least [i] && i * primes [j] <= n && j < primes.size (); j ++) {
            if (least [i * primes [j]] != 0)least [i * primes [j]] = min(least [i * primes [j]], primes [j]);
            else least [i * primes [j]] = primes [j];
        }
    }
    for (int i = 2; i <= n; i ++)
        if (least [i] == i)nprime ++;
}
void E2 (void){
    for (int i = 4; i <= n; i += 2)f [i] = 1;
    for (int i = 3; i * i <= n; i += 2)
        if (f [i] == 0)
            for (int j = i * i; j <= n; j += 2 * i)
                f [j] = 1;
    for (int i = 2; i <= n; i ++)nprime += !f [i];
}
int main (void){
    fin >> n;
    E1 ();
    fout << nprime;
    return 0;
}