Cod sursa(job #861201)

Utilizator SmarandaMaria Pandele Smaranda Data 21 ianuarie 2013 09:59:35
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>
#include <math.h>
#include <bitset>

using namespace std;

bitset <2000008> b;

void Read (long &N) {
    scanf ("%ld", &N);
}

void Solve (const long &N) {
    long lim, i, num = N - 1, j;
    lim = sqrt (N);
    for (i = 4; i <= N; i = i + 2) {
        b.set (i, 1);
        num --;
    }
    for (i = 3; i <= lim; i += 2)
        if (b.test (i) == 0)
            for (j = i * i; j <= N; j += i)
                if (b.test (j) == 0){
                    b.set (j, 1);
                    num --;
                }
    printf ("%ld\n", num);
}

int main () {
    long N;

    freopen ("ciur.in", "r", stdin);
    freopen ("ciur.out", "w", stdout);

    Read (N);
    Solve (N);
    return 0;
}