Cod sursa(job #861200)

Utilizator SmarandaMaria Pandele Smaranda Data 21 ianuarie 2013 09:57:56
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 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) {
                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;
}