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;
}
};