#include #include #include #include unsigned long long pi (unsigned long long v) { const int C[2] = { 1, 5 }; char A[2][65536]; unsigned P[2][8000], Z[2]; unsigned a, b, c, f, i, j, k, l, m, n, o, p, r, w, y; n = 0; memset (Z, 0, sizeof (Z)); w = 1 + v / 6; if (v >= 2) n++; if (v >= 3) n++; if (v >= 5) { n++; P[1][Z[1]++] = 5; } if (v >= 7) { n++; P[0][Z[0]++] = 7; } if (v >= 11) { n++; P[1][Z[1]++] = 11; } r = 65536; if (r > w) r = w; l = 1 + (unsigned) sqrt (r / 6); memset (A, 1, sizeof (A)); for (m=0; m<2; m++) { c = C[m]; for (p=0; p<2; p++) { a = C[p]; for (i=0; i k) r = k; for (i=2; i w) r = w; l = 1 + (unsigned) (sqrt (r / 6)); memset (A, 1, sizeof (A)); for (m=0; m<2; m++) for (p=0; p<2; p++) { a = C[p]; for (i=0; ; i++) { f = P[m][i]; y = f / 6; if (y >= l) break; o = b * 6; o += f - (o % f); for (j=o; ;j+=f) { k = (j - a) / 6; if (k * 6 + a == j) if (k != y) break; } for (j=k; j k) r = k; l = r - b; for (i=0; i