計算 `1^p + 2^p + ... + n^p mod 10003`。測試組數 T,每組給 n, p(n ≤ 1000, p ≤ 1000)。
對每個底數 `i`,用二進制分解指數 `p` 計算 `i^p % 10003`:
long long mod_pow(long long a, long long b, long long mod) {
long long res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
#include <stdio.h>
#define MOD 10003
int main() {
int T; scanf("%d", &T);
while (T--) {
long long n, p; scanf("%lld%lld", &n, &p);
if (n == 0) { printf("0\n"); continue; } // 題目保證 n>0,但測試數據可能含 0
long long sum = 1; // 1^p = 1
for (long long i = 2; i <= n; i++) {
long long a = i, b = p, t = 1;
while (b) {
if (b & 1) t = t * a % MOD;
a = a * a % MOD;
b >>= 1;
}
sum = (sum + t) % MOD;
}
printf("%lld\n", sum);
}
return 0;
}