Cod sursa(job #2753986)

Utilizator ovidiu2007pavel ovidiu ovidiu2007 Data 24 mai 2021 20:25:06
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <cmath>

using namespace std;
bool p[2000000];
int N = 0;
int NP = 0;

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

void elim(int a) {
    int check = a*a;
    while(check <= N) {
        p[check-1] = 1;
        check += a;
    }
}

bool eprim(int a) {
    int ct = sqrt(a);
    int i = 2;
    while (i < ct) {
        if(a % i == 0) return false;
        i++;
    }
    return true;
}

int cntp() {
    int countp = 0;
    for(int i = 0; i < N; i++) {
        if(p[i] == 1) {
            countp++;
        }
    }
    return countp;
}

int ciur() {
    int i = 1;
    while(i < N) {
        if(eprim(i+1)) elim(i+1);
        i++;
    }
    return cntp();
}

int main()
{
    in >> N;
    p[0] = 1;
    out << N - ciur();
    return 0;
}