题目描述:
Your task is to calculate a^b 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
求a的b次方模1337的结果,a的b次方很容易就溢出了,而存在一个性质是x*y%k=(x%k)*(y%k),即令x=ak+b,y=ck+d,那么x*y%k=bd。有了这个性质之后,我们需要把a^b拆分成多个步骤,因为b是用数组表示的,可以按照b的每一位计算结果。
class Solution {
public:
int superPow(int a, vector<int>& b) {
long long result=1;
a%=1337;
for(int i=0;i<b.size();i++)
{
result=superPow(result,10)*superPow(a,b[i]);
result%=1337;
}
return result;
}
int superPow(int a, int n)
{
if(n==0) return 1;
int result=1;
for(int i=0;i<n;i++) result=result*a%1337;
return result;
}
};