#include // A057168(n)=n+bitxor(n, n+n=bitand(n, -n))\n\4+n long long A057168(long long n) { long long m = n & -n; return n + (n ^ (n + m)) / m / 4 + m; } constexpr long long W = 63; long long cyc[W+1]; bool tile(long long mix, long long i, long long r, long long t) { if (r==0) { return true; } else { while (i < t) { if ((mix & cyc[i])==0) { if (tile(mix + cyc[i], i+1, r-1, t)) { return true; } } i++; } return false; } } long long a(long long n) { long long v = 0; long long mk = 1LL << n; long long high = 1LL << (n-1); for (long long d = 1; d <= n; d++) { if ((n % d)==0) { long long p = n/d; for (long long k = (1LL << d)-1; k < mk; k = A057168(k)) { cyc[0] = k; for (long long t = 1;; t++) { cyc[t] = cyc[t-1]/2 + ((cyc[t-1] % 2) ? high : 0); if (cyc[t]==k) { if (tile(k, 1, p-1, t)) { v += t; } break; } else if (cyc[t] > k) { break; } } } } } return v; } int main() { for (long long n = 1; n < W; n++) { std::cout << n << ' ' << a(n) << std::endl; } return 0; }