372. Super Pow
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.
Example1:
a = 2 b = [3] Result: 8
Example2:
a = 2 b = [1,0] Result: 1024
b可能是一个超长的。所以要拆分。
1、2^23 = (2^2)^10 * 2^3; => 2^20 拆分为 (2^2)^10
2、(a * b) % c = (a % c) * (b % c)
class Solution {
public:
int pow(int a, int b)
{
if (b == 0) return 1;
if (b == 1) return a % 1337;
return pow(a % 1337, b / 2) * pow(a % 1337, b - b / 2) % 1337;
}
int superPow(int a, vector<int>& b)
{
int res = 1;
for (int i = 0; i < b.size(); i++)
{
res = pow(res, 10) * pow(a, b[i]) % 1337; // 2^23 = (2^2)^10 * 2^3; => 2^20 拆分为 (2^2)^10
}
return res;
}
};
本文介绍了一种计算ab mod 1337的方法,其中a为正整数,b为一个非常大的正整数,以数组形式给出。通过示例说明了如何将大指数分解并使用模运算的性质简化计算过程。
751

被折叠的 条评论
为什么被折叠?



