Cod sursa(job #1360308)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 25 februarie 2015 13:44:55
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
#include<string>
#include<bitset>
#include<vector>

using namespace std;

#ifdef HOME
const string inputFile = "input.txt";
const string outputFile = "output.txt";
#else
const string problemName = "ciur";
const string inputFile = problemName + ".in";
const string outputFile = problemName + ".out";
#endif

const int NMAX = 2000000 + 5;

int N;
bitset<NMAX> viz;
vector<int> P;

void ciur() {
    int i, j, p;

    P.push_back(2);

    for(i = 1, j = 3; j * j <= N; i++, j += 2)
        if(!viz[i]) {
            P.push_back(j);
            for(p = j * j / 2; 2 * p + 1 <= N; p += j)
                viz[p] = 1;
        }

    for(; j <= N; i++, j += 2)
        if(!viz[i])
            P.push_back(j);
}

int main() {
    freopen(inputFile.c_str(), "r", stdin);
    freopen(outputFile.c_str(), "w", stdout);

    scanf("%d", &N);

    ciur();

    printf("%d\n", P.size());

    return 0;
}