Pagini recente » Cod sursa (job #565037) | Cod sursa (job #2366158) | Cod sursa (job #1990327) | Cod sursa (job #59427) | Cod sursa (job #548683)
Cod sursa(job #548683)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int MAX = 1 << 18;
unsigned char V[MAX];
//a - (a / mod) * mod
inline int mod ( int a, int moD ) {
if (a >= moD) a %= moD;
return a ;
}
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 ((mod(x,12)==1) || (mod(x,12)==5)) V[x >> 3] ^= 1 << ( x & 7 ) ;
x = 3*i*i+j*j;
if (x<limit) if (mod(x,12)==7) V[x >> 3] ^= 1 << ( x & 7 ) ;
x = 3*i*i-j*j;
if (i>j) if (x<limit) if (mod(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;
}