Leetcode 372. 超级次方
题目
你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
测试样例
示例 1:
输入: a = 2, b = [3]
输出: 8
示例 2:
输入: a = 2, b = [1,0]
输出: 1024
题解
快速幂 我们先来看一看a[1,5,6,4],我们可以把幂指数进行缩减,变为 a4 * (a[1,5,6])10 = a4 * ((a10)6*(a[1,5])100) = ``````。即通过这种方式循环相乘,我们需要用一个变量记录a10i。详细过程见代码
代码
int abPower(int a
,int b
,int mod
){
if(!b
) return 1;
int ans
= a
;
b
--;
while(b
){
ans
= (ans
*a
) % mod
;
b
--;
}
return ans
;
}
int superPow(int a
, vector
<int>& b
) {
int n
= b
.size(),mod
=1337;
a
= a
% mod
;
int ans
= 1,x
=a
;
for(int i
=n
-1; i
>=0; i
--){
ans
= (ans
*abPower(x
,b
[i
],mod
))%mod
;
x
= abPower(x
,10,mod
);
}
return ans
;
}
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/super-pow 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。