Cod sursa(job #2304466)

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

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

int main()
{
    cout << sizeof(a)/(1024.0 * 1024.0);
    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;
}