Cod sursa(job #1283015)

Utilizator sherban26FMI Mateescu Serban-Corneliu sherban26 Data 4 decembrie 2014 23:14:10
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <fstream>

using namespace std;

const int NMAX = 1 << 17;

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

unsigned char ciur[NMAX];

int main()
{
    int n, pr = 0, j, i2;

    fin >> n;

    for (int i = 3; i <= n; i += 2)
    {
        //i << 4 si nu 3 pt ca se iau in considerare numai numerele impare
        //din cauza asta si i << 1
        if (!(ciur[i << 4] & (1 << ((i << 1) & 7))))
        {
            ++pr;

            //j = 3 * i si nu 2 * i pt ca se sare peste multipli de 2
            for (i2 = i << 1, j = i + i2; j <= n; j += i2)
                ciur[j << 4] |= 1 << (j & 7);
        }
    }

    fout << pr;

    return 0;
}