Cod sursa(job #2215466)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 22 iunie 2018 11:49:49
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 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;
    E2 ();
    fout << nprime;
    return 0;
}