Cod sursa(job #2668073)

Utilizator H7GhosTsdfgsd asdf H7GhosT Data 4 noiembrie 2020 14:13:13
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>
using namespace std;


int main() {
    freopen("ciur.in", "r", stdin);
    freopen("ciur.out", "w", stdout);
    int mxN = 2e6/16 + 1;
    char primes[mxN]{};
    memset(primes, 0, sizeof(primes));
    int n;
    scanf("%d", &n);
    int res = 1;

    for (int i = 1; (i << 1) + 1 <= n; i++) {
        if (primes[(i >> 3)] & (1 << (i & 7))) continue;
        for (int j = 3*i + 1; (j << 1) + 1 <= n; j += (i << 1) + 1) {
            primes[j >> 3] |= (1 << (j & 7));
        }
    }
    for (int i = 1; (i << 1) + 1 <= n; i++) {
        res += (primes[i >> 3] & (1 << (i & 7))) == 0;
    }
    printf("%d\n", res);
}