372. 超级次方
题目
你的任务是计算 a的b次方 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
解题思路
主要掌握(a*b)%k=(a%k)(b%k)%k
主要思路见书355
代码
class Solution {
int base = 1337;
public int superPow(int a, int[] b) {
//base case:任何数的0次方都是1
if (b == null || b.length == 0) {
return 1;
}
//取出最后一个数
int last = b[b.length - 1];
//更新一下b
b = Arrays.copyOfRange(b, 0, b.length - 1);
int part1 = myPow(a, last);
int part2 = myPow(superPow(a, b), 10);
return (part1 * part2) % base;
}
//计算a的k次方,然后与base求模
public int myPow(int a, int k) {
//对因子取模 基于(a*b)%k = (a%k)(b%k)%k
a %= base;
int res = 1;
for (int i = 0; i < k; i++) {
res *= a;
res %= base;
}
return res;
}
}