Cod sursa(job #2702165)

Utilizator beingsebiPopa Sebastian beingsebi Data 3 februarie 2021 00:19:15
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciur.in");
ofstream g("ciur.out");
int n;
bool sieve[2000009];
int main()
{
    f >> n;
    for (int x = 1; x * x <= n; x++)
        for (int y = 1; y * y <= n; y++)
        {
            int r = 4 * x * x + y * y;
            if (r < n && (r % 12 == 1 || r % 12 == 5))
                sieve[r] ^= 1;
            r -= x * x;
            if (r < n && r % 12 == 7)
                sieve[r] ^= 1;
            r -= 2 * y * y;
            if (x > y && r < n && r % 12 == 11)
                sieve[r] ^= 1;
        }
    int rez = 0;
    sieve[3] = 1;
    for (int i = 3; i <= n; i++)
        if (sieve[i])
        {
            rez++;
            for (int j = i * i; j <= n; j += i * i)
                sieve[j] = 0;
        }
    g << rez + (2 <= n);
    return 0;
}