Cod sursa(job #1615158)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 26 februarie 2016 14:05:51
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>

using namespace std;

const int MAX_N = 2000000;

typedef unsigned long long u64;

u64 T[(MAX_N >> 6) + 1];

int main() {
    ifstream fin("ciur.in");
    ofstream fout("ciur.out");

    int N; fin >> N;
    fin.close();

    int i, ret = 1;

    for (i = 3; i * i <= N; i += 2) {
        if ((T[i >> 6] & (1ULL << (i & 63))) == 0) {
            ++ ret;

            for (int j = i * i; j <= N; j += 2 * i) {
                T[j >> 6] |= (1ULL << (j & 63));
            }
        }
    }

    while (i < N) {
        ret += ((T[i >> 6] & (1ULL << (i & 63))) == 0);
        i += 2;
    }

    fout << ret << '\n';
    fout.close();

    return 0;
}