#include #include /* 2^n - 1 for 1 <= n <= 64. Writing (1 << 64) - 1 would be undefined behaviour, so start from all 64 bits set and shift the surplus away. */ uint64_t minimum_moves(int n) { return UINT64_MAX >> (64 - n); } int main(void) { int sizes[] = {3, 10, 64}; for (int i = 0; i < 3; i++) { printf("%d disks: %" PRIu64 " moves\n", sizes[i], minimum_moves(sizes[i])); } return 0; }