Cod sursa(job #2304465)

Utilizator NeganAlex Mihalcea Negan Data 18 decembrie 2018 08:33:25
Problema Ciurul lui Eratosthenes Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
using namespace std;

int a[2000005], n;
/// a[i] = 0, daca i - prim
///      = 1, daca i nu e prim

int main()
{
    int i, j, n;
    ifstream fin("ciur.in");
    ofstream fout("ciur.out");
    fin >> n;
    a[0] = a[1] = 1;
    /// marchez cu 1 numerele pare >= 4
    for (i = 4; i <= n; i += 2)
        a[i] = 1;
    /// numerele impare:
    /// n log*(n)
    for (i = 3; i * i <= n; i += 2)
        if (a[i] == 0) /// i - prim, dar multiplii sai nu
            for (j = i * i; j <= n; j = j + 2 * i)
                a[j] = 1;
    j = 0;
    for (i = 1; i <= n; i++)
        if (a[i] == 0) j++;
    fout << j << "\n";
    fout.close();
    fin.close();
    return 0;
}