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
因为(a*b)%n=((a%n)*(b%n))%n,所以要把式子变换一下,比如a^345=a^340 * a^5=(a^34)^10 * a^5,依次类推,再拆分a^34。
class Solution {//a^345 a^340 * a^5
public int superPow(int a, int[] b) {
int rem=1;
for(int i=0;i<b.length;i++){
rem=pow(rem,10)%1337;
rem=(rem*pow(a,b[i]))%1337;
}
return rem;
}
int pow(int rem,int n){
int ret=1;
for(int i=0;i<n;i++){
ret=(ret*(rem%1337))%1337;
}
return ret;
}
}