#include #include #include using namespace std; #define MAX (1LL<<20) class Table { public: Table() { small = new bitset; } bool get(long long v) { if (vtest(v); } else { return big.count(v)>0; } } void set(long long v) { if (vset(v); } else { big[v] = true; } } ~Table() { delete small; small = 0; } private: bitset *small; map big; }; #define WANTED 10000 long long a[1+WANTED]; int main() { Table add; Table mul; long long n = 0; long long i = 0; for (long long v=0; v<1000000000LL; v++) { bool ok = true; if (add.get(v+v) || mul.get(v*v)) { ok = false; } if (ok) { map xadd; for (long long m=1; m<=n; m++) { long long s = a[m]+v; if (xadd.count(s) || add.get(s)) { ok = false; break; } else { xadd[s] = true; } } } if (ok) { map xmul; for (long long m=2; m<=n; m++) { long long p = a[m]*v; if (xmul.count(p) || mul.get(p)) { ok = false; break; } else { xmul[p] = true; } } } if (ok) { n++; a[n] = v; if (n==WANTED) { break; } for (long long m=1; m<=n; m++) { add.set(a[m]+a[n]); } for (long long m=2; m<=n; m++) { mul.set(a[m]*a[n]); } } if (!add.get(v)) { cout << ++i << " " << v << endl; if (i==10000) { break; } } } return 0; }