#include #include #define MAX 20000LL // number of terms #define VMAX (1LL<<33) // greatest product long long a[MAX]; bool *seen = 0; int main() { seen = new bool[VMAX]; memset(seen, 0, sizeof(*seen)*VMAX); for (long long n=0; n=2) ? a[n-2]+1 : 1;; v++) { bool ok = true; for (long long k=n-1; k>=0; k-=2) { long long p = a[k]*v; if (p >= VMAX) { goto theEnd; } if (seen[p]) { ok = false; break; } } if (ok) { a[n] = v; if (n%2) { printf("%lld %lld\n", 1+n/2, a[n]); fflush(stdout); } for (long long k=n-1; k>=0; k-=2) { long long p = a[k]*v; seen[p] = true; } break; } } } theEnd: delete[] seen; return 0; }