
题目分析
- 这道题和快速幂相似,不同之处是指数部分是由数组组成。所以我们对整个运算过程进行分解
ab=a1337a1337=a1330∗a7a1330∗a7=a133∗10∗a7a133∗10∗a7=(a133)10∗a7...
- 由此我们看出每次计算只需要计算数组中的一位即可,然后对数组的前n项进行递归计算
代码
var superPow = function (a, b) {
const mod = 1337;
const power = (_a, _b) => {
let result = 1;
_a %= mod;
while (_b !== 0) {
if (_b & 1 === 1) {
result = result * _a % mod;
}
_a = _a * _a % mod;
_b >>>= 1;
}
return result;
}
const dfs = (index) => {
if (index < 0) return 1;
return power(dfs(index - 1), 10) * power(a, b[index]) % mod;
}
return dfs(b.length - 1);
};