问题描述
解法探究
此题难度看似不大,但是暗藏陷阱:b可能是一个极大的数。既然不能用常规方式来解这道题,那么就不得不考虑以下公式:
(a * b) % n = ((a % n) * (b % n)) % n;a ^ (b * c) = a ^ b * a ^ c。我们可以从指数的最高位开始逐位进行幂运算,并将底数事先进行取余操作,这样既不至于运算结果过大超出int类型的限制,也不会因为幂运算需要进行的乘法次数过多而导致超时。具体代码实现如下:
class Solution {
private:
int powmod(int a, int k) {
a %= 1337;
int res = 1;
for (int i = 0; i < k; i++) res = (res * a) % 1337;
return res;
}
public:
int superPow(int a, vector<int>& b) {
int res = 1;
a %= 1337;
for(int i = 0; i < b.size(); i++){
res = (powmod(res, 10) * powmod(a, b[i])) % 1337;
}
return res;
}
};