LeetCode 372. 超级次方
你的任务是计算 $a^b$ 对 1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
示例 1:
输入:a = 2, b = [1,0]
输出:1024
method: 快速幂
const int mod = 1337;
int pow(int a, int b) { // 快速幂
a %= mod;
int t = 1;
while (b) {
if (b & 1) t = t * a % mod;
a = a * a % mod;
b >>= 1;
}
return t;
}
int superPow(int a, vector<int>& b) {
if (b.size() == 0) return 1;
int x = b.back();
b.pop_back();
return pow(superPow(a, b), 10) * pow(a, x) % mod; // 前部分还要加个10次方
}