#include <bitset> #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; #define MAX (1LL<<33) bitset<MAX> *seen; #define CAN (1LL<<26) long long cc[CAN]; long long other(long long v) { int w = 1; for (long long b=1;; b<<=1) { if ((v & b)==0) { if (w==CAN) { exit(1); } for (int k=0; k<w; k++) { cc[w+k]=b + cc[k]; if (cc[w+k]>=MAX) { exit(2); } if (!seen->test(cc[w+k])) { return cc[w+k]; } } w<<=1; } } } int main() { seen = new bitset<MAX>; cc[0] = 0; long long m = 0; long long mx = 0; long long v=1; for (long long n=1; m<1000; n++) { if (mx<v) { mx=v; m++; cout << m << ' ' << mx << endl; } seen->set(v); v = other(v); } delete seen; return 0; }