Cod sursa(job #2917475)

Utilizator alin.gabrielAlin Gabriel Arhip alin.gabriel Data 5 august 2022 12:28:01
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;

#define N 2000001

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

int n;
bool v[N];

void ciur(int k) {
    // cum gasim un numar neprim > k, il marcam
    for (int i = k + 2; i <= n; i+=2)
        if (i % k == 0)
            v[i] = false;
}

int main() {
    f >> n;
    // 2 este singurul numar prim par
    v[2] = true;
    int cnt = 1;
    // presupunem ca toate numerele impare sunt prime
    for (int i = 3; i <= n; i+=2)
        v[i] = true;

    for (int i = 3; i <= sqrt(n); i+=2)
        ciur(i);

    for (int i = 3; i <= n; i+=2)
        if (v[i] == true)
            cnt += 1;

    g << cnt << "\n";
    return 0;
}