給定 N (1 ≤ N ≤ 10⁹),求 N^N 的個位數字。多測試用例。
個位數字只取決於底數的個位 b = N % 10 及指數 N。各數字冪次個位存在循環節(長度 1、2 或 4):
| b | 循環節 | 長度 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 1 |
| 2 | 2,4,8,6 | 4 |
| 3 | 3,9,7,1 | 4 |
| 4 | 4,6 | 2 |
| 5 | 5 | 1 |
| 6 | 6 | 1 |
| 7 | 7,9,3,1 | 4 |
| 8 | 8,4,2,6 | 4 |
| 9 | 9,1 | 2 |
指數 N 模循環節長度 c,若餘數為 0 則取第 c 位。計算 b^c % 10 即可。
#include <bits/stdc++.h>
using namespace std;
int lastDigit(long long n) {
int b = n % 10;
if (b == 0 || b == 1 || b == 5 || b == 6) return b;
int c = (b == 4 || b == 9) ? 2 : 4;
int exp = n % c; if (exp == 0) exp = c;
int res = 1;
for (int i = 0; i < exp; ++i) res = (res * b) % 10;
return res;
}
int main() {
int T; cin >> T;
while (T--) {
long long n; cin >> n;
cout << lastDigit(n) << '\n';
}
return 0;
}
(a*b) % m = ((a%m)*(b%m)) % m。