/* Submitted 2003-09-05 by Daniel A. Jimenez (djimenez@cs.utexas.edu) */ #include #include #include #include unsigned find (unsigned b, unsigned i, unsigned a, unsigned c) { unsigned j, k, n; n = 6 * i + c; b *= 6; b += (n-(b%n)); for (j=b; ; j+=n) { k = (j-a)/6; if (k * 6 + a == j) if (k != i) return k; } } unsigned long long pi (unsigned long long v) { char A0[65536], A1[65536]; unsigned b, s, r, i, j, k, l, w, f1, f2, n; char *p0, *p1; n = 0; w = 1 + v/6; if (v >= 2) n++; if (v >= 3) n++; if (v >= 5) n++; if (v >= 7) n++; if (v >= 11) n++; for (b=0; b<=w; b+=65536) { r = b + 65536; if (r > w) r = w; l = 1 + (unsigned) sqrt (r); memset (A0, 1, r-b); memset (A1, 1, r-b); for (i=0; i v) break; n += *p0++; k = i * 6 + 5; if (k > v) break; n += *p1++; } } return n; }