Cod sursa(job #2215156)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 21 iunie 2018 10:47:51
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream cin("ciur.in");
ofstream cout("ciur.out");

int nprime, n;

vector < int > prime;

bool undiv[2000009];

//void ciur2() {
//    for (int i = 2; i <= n; ++i) {
//        if (undiv[i] == 0) {
//            prime.push_back(i);
//            undiv[i] = i;
//        }
//        for (int p = 0; prime[p] <= undiv[i] && i * prime[p] <= n && p < prime.size(); ++p) {
//            if (undiv[i * prime[p]] != 0) {
//                undiv[i * prime[p]] = min(undiv[i * prime[p]], prime[p]);
//            }
//            else {
//                undiv[i * prime[p]] = prime[p];
//            }
//        }
//    }
//}

void ciur1() {
    for (int i = 4; i <= n; i += 2) {
        undiv[i] = 1;
    }
    for (int i = 3; i * i <= n; i += 2) {
        if (undiv[i] == 0) {
            for (int j = i * i; j <= n; j += 2 * i) {
                undiv[j] = 1;
            }
        }
    }
    for (int i = 2; i <= n; ++i) {
        nprime += (undiv[i] == 0);
    }
}

int main()
{
    cin >> n;
    ciur1();
    cout << nprime;
    return 0;
}