Cod sursa(job #2917583)

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

#define N 2000001
 
ifstream f("ciur.in");
ofstream g("ciur.out");

int n, cnt = 1;
bool v[N];

int main() {
    f >> n;
    // presupunem ca toate numerele sunt prime
    memset(v, 1, n);
    // putem sari marcarea multiplilor lui 2 ca neprimi 
    // ptr ca 2 este singurul numar prim par
    // si incepem ciurul de la 3 cu increment de 2
    // ptr ca numerele prime sunt impare.
    for (int p = 3; p <= sqrt(n); p+=2)
        // cautam un numar nemarcat (prim)
        if (v[p] == 1)
            // marcam multipli lui p incepand cu p^2 ca neprimi
            for (int k = p; k <= n / p; v[k * p] = 0, k++);
    // numerele ramase nemarcate sunt prime
    for (int i = 3; i <= n; cnt += v[i], i+=2);

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