#include #include #define NTH 21 int main() { int count = 0; uint64_t d10 = 10; uint64_t t = 1; uint64_t b = 1, s; uint64_t x; #define FOUND(x, b) do { \ printf("%llu = %llu^2\n", x, b); \ if (++count >= NTH) return 0; \ } while (0) for (;;) { x = t*d10+t+1; while ( (s = b*b) < x) b++; if (s == x) FOUND(x, b); x += d10 - 1; while ( (s = b*b) < x) b++; if (s == x) FOUND(x, b); if (++t == d10 - 1) { t = d10; d10 *= 10; } } return 1; }