漢諾塔最少步數 = `2^n - 1`。輸入 `n ≤ 10,000,000`,輸出對 `9973` 取模結果。
直接 `pow`/`<<` 會溢出,需**快速冪取模**。
int mod_pow(int base, long long exp, int mod) {
long long result = 1;
long long b = base % mod;
while (exp > 0) {
if (exp & 1) result = (result * b) % mod;
b = (b * b) % mod;
exp >>= 1;
}
return (int)result;
}
int main() {
int n;
while (scanf("%d", &n) == 1 && n != 0) {
if (n < 0) continue;
int ans = (mod_pow(2, n, 9973) - 1 + 9973) % 9973; // 防負數
printf("%d\n", ans);
}
return 0;
}