Cod sursa(job #1809674)

Utilizator WebDesignbyTMGhiorghiu Ioan-Viorel WebDesignbyTM Data 19 noiembrie 2016 10:03:00
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
#include <vector>
using namespace std;
int main ()
{
    ifstream fi ("ciur.in");
    ofstream fo ("ciur.out");
    int n;
    fi >> n;
    vector<bool> pr(n / 2 + 1);

    int count = 1;
    for (int i = 1; 2*(i*i + i) <= n; ++i)
    {
        if (pr[i] == 0) // 2i+1 is definitely prime
        {
            // eliminate 2i+1's multiples
            for (int j = 2*(i*i + i); 2*j + 1 <= n; j += 2*i + 1)
            {
                pr[j] = 1;
            }
        }
    }

    for (int i = 1; 2*i + 1 <= n; ++i)
        if (pr[i] == 0)
            count += 1;

    fo << count;
    return 0;
}