题目描述:
你的任务是计算 ab
对 1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
样例:
方法一:
class Solution {
public:
int MOD = 1337;
int superPow(int a, vector<int>& b) {
return dfs(a, b, b.size() - 1);
}
int dfs (int a, vector<int>& b, int rea)
{
if (rea == -1)
{
return 1;
}
return pow(dfs(a, b, rea - 1), 10) * pow(a, b[rea]) % MOD;
}
int pow (int a, int x) //计算a的x次方,注意每次乘积都要模1337
{
int ans = 1;
a %= MOD;
while (x)
{
ans = ans * a % MOD;
x--;
}
return ans;
}
};
这种数学问题就得考验推导能力了,至于我还是得看三叶姐的题解才行
首先需要知道一个简单的公式:
然后就可以将计算过程分解如下,在每一步乘积后模1337即可:
最终可以分解为:
dfs()函数中乘积的两个值即对应着上述式子中每个括号中的两个值