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;
}
}
本文介绍了一种计算大数幂次模1337的高效算法,通过将大数拆分为数组形式,利用模运算的性质进行优化计算。以具体示例展示了算法的实现过程,包括如何将幂次分解并逐步求解。
1357

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



