对于这个问题使用普通的遍历就有点不合适了,复杂度太高。
这里可以使用基于二分思想的快速幂法,也称二分幂。如下:
typedef long long LL;
//递归的写法
LL BINARYPOW(LL a,LL b,LL m){
if(b==0) return 1;
//b为奇数,转换为b-1
if(b%2==1) return a*binaryPow(a,b-1,m)%m;
else{
LL mul=binaryPow(a,b/2,m);
return mul*mul%m;
}
}
条件if(b%2==1)可以用if(b&1)代替,因为b&1进行位于操作,判断b的末位是否为1,因此当b为奇数时b&1返回1,if条件成立。