题目
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
代码
class Solution {
int base=1337;
int myPow(int a,int k){//a^k
if (k==0) return 1;
a %=base;
if (k%2==1) return a*myPow(a,k-1)%base;//若k是奇数
else {// k 是偶数
int sub=myPow(a,k/2);
return (sub*sub)%base;
}
}
public int superPow(int a, int[] b) {
if (b.length==0) return 1;
int n=b.length;
int last= b[n-1];//取出最后一位
int[] c = new int[n - 1];
for (int i = 0; i < n-1; i++) {
c[i]=b[i];
}
int part1=myPow(a,last);
int part2=myPow(superPow(a,c),10);
//记得求模
return (part1*part2)%base;
}
}
要点
-
我们可以每次取数组的最后一位进行求幂,再跟剩余的幂乘上10
-
幂运算使用快速幂