Cod sursa(job #2215154)

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

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

int nprime, n;

vector < int > prime;

int 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] = 2;
    }
    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] = i;
            }
        }
    }
    for (int i = 2; i <= n; ++i) {
        nprime += (undiv[i] != 0);
    }
}

int main()
{
    cin >> n;
    ciur2();
    cout << prime.size();
    return 0;
}