#include #include #include #include using namespace std; #define MAX (1LL<<25) bitset *seen = 0; vector cc; long long other(long long p) { seen->set(p); long long w=1; for (long long b=1;; b<<=1) { if ((p & b)==0) { if (cc.size()==w) { cc.resize(2*w); } for (long long k=0; k= MAX) { exit(1); } if (!seen->test(c)) { return c; } } w*=2; } } } vector a; long long get(long long n) { if (n==a.size()) { a.push_back(other(a[n-1])); } return a[n]; } int main() { seen = new bitset; seen->set(0); // only positive integers cc.resize(1); a.push_back(0); for (long long n=1; n<=10000; n++) { long long v = get(n); for (long long m=n-1;; m--) { long long w = get(m); if ((v & w)==w) { cout << n << ' ' << m << endl; break; } } } delete seen; return 0; }