給定整數 N (1 ≤ N ≤ 10^9? 題目未給上限但樣例暗示較大),求 N^N 的最右位數字(即個位數字)。多測試用例。
只關心個位,故只需計算 `(N mod 10)^N mod 10`。即底數模 10 後再做模 10 指數運算。
遞歸/迭代實現 `pow_mod(base, exp, mod)`:
#include <stdio.h>
int mod_pow(int base, int exp, int mod) {
int res = 1;
while (exp) {
if (exp & 1) res = (res * base) % mod;
base = (base * base) % mod;
exp >>= 1;
}
return res;
}
int main() {
int T, n;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
printf("%d\n", mod_pow(n % 10, n, 10));
}
return 0;
}
int rightMost(int n, int N) { // n: 指數, N: 底數
if (n == 0) return 1;
int t = rightMost(n / 2, N);
t = t * t % 10;
if (n % 2) t = t * N % 10;
return t;
}
// 調用: rightMost(n, n%10)
每測試用例 O(log N) 時間,O(log N) 遞歸棧空間(或 O(1) 迭代)。極快。
HDU 1061 是模冪運算的入門題。核心是識別「只需個位」→「底數模 10」→「快速冪取模 10」。注意**指數不可取模**,這是新手常見錯誤。迭代版本更穩健,推薦生產使用。