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.
Example 1:
Input: a = 2, b = [3]
Output: 8
Example 2:
Input: a = 2, b = [1,0]
Output: 1024
参考资料:here。
这道题需要用到一些数论的知识,具体的三个如下:
(a^b)%1337=(a%1337)^(b%1337)
这个公式的作用很明显了,是用来限制a的大小的。
xy%1337=((x%1337)*(y%1337))%1337
这个公式的作用是逐个处理向量b中的每一个数。
a^2%1337=(a%1337)*(a%1337)
这个公式的作用是防止b中某个元素过大。
class Solution {
private:
int helper(int a, int b) {
int ans = 1;
for (int i = 0; i < b; i++) ans = a*ans%1337;
return ans;
}
public:
int superPow(int a, vector<int>& b) {
if (b.empty()) return 1;
a = a % 1337;
int last = b.back();
b.pop_back();
return (helper(superPow(a, b),10) * helper(a, last))%1337;
}
};