Cod sursa(job #548669)

Utilizator cont_de_testeCont Teste cont_de_teste Data 7 martie 2011 18:07:34
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int MAX = 1 << 19;

unsigned char V[MAX];

int main() {
    int limit;

    ifstream f("ciur.in");
    ofstream g("ciur.out");

    f>>limit;

    int i,j,x,k = sqrt ( limit );

    for (i=1; i<=k; i++)
        for (j=1; j<=k; j++) {
            x = 4*i*i+j*j;
            if (x<limit) if ((x % 12==1) || (x % 12==5)) V[x >> 3] ^= 1 << ( x & 7 ) ;
            x = 3*i*i+j*j;
            if (x<limit) if (x % 12==7) V[x >> 3] ^= 1 << ( x & 7 ) ;
            x = 3*i*i-j*j;
            if (i>j) if (x<limit) if (x % 12==11) V[x >> 3] ^= 1 << ( x & 7 ) ;
        }

    for (i=5; i<=k; i++) {
        x = i*i;
        j = 1;
        while (j*x<limit) {
            V[j*x >> 3] &= 255 - ( 1 << ( j*x & 7 ) );
            j++;
        }
    }
V[2 >> 3] |= 1 << ( 2 & 7 ) ;
V[3 >> 3] |= 1 << ( 3 & 7 ) ;

    x = 0;
    for (i=2; i<limit; i++) if ( V[i >> 3] & ( 1 << ( i & 7 ) ) ) x++;

    g<<x;


}