Cod sursa(job #2917509)

Utilizator alin.gabrielAlin Gabriel Arhip alin.gabriel Data 5 august 2022 14:11:47
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 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;
    int root = sqrt(n);
    // presupunem ca toate numerele sunt prime
    memset(v, 1, n);
    // dar sarim 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 toate celelalte numere prime sunt impare
    for (int i = 3; i <= root; i+=2)
        // cum gasim un multiplu de i, il marcam neprim
        for (int k = i + i; k <= n; v[k] = 0, k+=i);
    // toate numerele ramase nemarcate sunt prime
    // asa ca incepem adunarea lor
    for (int i = 3; i <= n; cnt += v[i], i+=2);

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