Cod sursa(job #2774018)

Utilizator andcovAndrei Covaci andcov Data 9 septembrie 2021 14:59:12
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
//
// Created by Andrei Covaci on 03.09.2021.
// https://infoarena.ro/problema/ciur
//

#include <fstream>
#include <iostream>

#define INPUT "ciur.in"
#define OUTPUT "ciur.out"
//#define INPUT "input.in"
//#define OUTPUT "output.out"

using namespace std;


int read() {
    ifstream in(INPUT);

    int n;
    in >> n;

    in.close();
    return n;
}

int solve(int n) {
    bool era[n + 1];
    for(int i = 3; i <= n; ++i) {
        era[i] = i % 2 != 0;
    }
    era[1] = false;
    era[2] = true;

    int prim = (n + 1) / 2;

    for(int i = 3; i <= n; i += 2) {
        for(int j = 2 * i; j <= n && era[i]; j += i) {
            if (era[j]) --prim;
            era[j] = false;
        }
    }

    return prim;
}

void print(int n) {
    ofstream out(OUTPUT);

    out << n;

    out.close();
}

int main() {
    auto nums = read();
    auto res = solve(nums);
    print(res);

    return 0;
}