#include <iostream> #include <unordered_set> using namespace std; int main() { unordered_set<long long> powersOf2; long long max2; // greatest power of 2 representable as long long for (long long p=1; p>0; p*=2) { powersOf2.insert(max2=p); } long long k=0; long long pp, p, v=0; for (long long n=0; v!=max2; n++) { switch (n) { case 0: case 1: v = n; break; default: v = (pp+p+1) & ~p; break; } if (powersOf2.count(v)) { cout << ++k << ' ' << n << endl; } pp = p; p = v; } return 0; }