你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
示例 1:
输入: a = 2, b = [3]
输出: 8
示例 2:
输入: a = 2, b = [1,0]
输出: 1024
由于b是数组,可以对数组的每个数进行运算。
例如:
模运算:
-
(a + b) % n = (a % n + b % n) % n
-
(a - b) % n = (a % n - b % n) % n
-
(a * b) % n = (a % n* b % n) % n
-
a ^ b % n = ((a % n)^b) % n
代码实现:
public class Solution {
public int superPow(int a, int[] b) {
int result = 1;
for (int i = 0,len = b.length; i < len; i++) {
result = pow(result, 10) * pow(a, b[i]) % 1337;
}
return result;
}
/**
* 求x的n次方
* @param x
* @param n
* @return
*/
private int pow(int x, int n) {
int result = 1;
while (n != 0) {
if ((n & 1) == 1) {
result = (result % 1337) * (x % 1337) % 1337;
}
x = (x % 1337) * (x % 1337) % 1337;
n >>= 1;
}
return result;
}
}