Cod sursa(job #2721409)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 11 martie 2021 19:33:32
Problema Ciurul lui Eratosthenes Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <iostream>
#define N 2000000

using namespace std;

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

int neprim[N + 1];

void ciur( int n ) {
    neprim[0] = neprim[1] = 0;
    for ( int d = 4; d <= n; d += 2 )
        neprim[d] = 1;
    for ( int d = 3; d * d <= n; d += 2 ) {
        if ( !neprim[d] ) {
            for ( int nr = d * d; nr <= n; nr += d )
                neprim[nr] = 1;
        }
    }
}

void sumpart( int v[], int n ) {
    for ( int i = 2; i <= n; i ++ )
        neprim[i] = neprim[i - 1] + 1 - neprim[i];
}

int main() {
    int n;
    fin >> n;
    ciur( n );
    sumpart( neprim, n );
    fout << neprim[n] << "\n";
}