#include #include #include #include using namespace std; #define MAX (1LL<<33) bitset *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=MAX) { exit(2); } if (!seen->test(cc[w+k])) { return cc[w+k]; } } w<<=1; } } } int main() { seen = new bitset; cc[0] = 0; long long m = 0; long long mx = 0; long long v=1; for (long long n=1; m<1000; n++) { if (mxset(v); v = other(v); } delete seen; return 0; }