1. 求幂取模问题
2. 求幂取模问题进阶
2.1 递归解法
typedef long long LL;
//求a^b % m,递归写法
LL binaryPow(LL a,LL b,LL m){
if(b == 0) return 1; //如果b为0,那么a^0=1
//b为奇数,转换为b-1
if(b % 2 == 1) return a * binaryPow(a,b-1,m) % m;
else{//b为偶数,转换为b/2
LL mul = binaryPow(a,b/2,m);
return mul*mul % m;
}
}
注意:
- 符号
*
和符号%
的优先级是一样的,所以会按照先左后右的顺序计算。- 条件
if(b % 2 == 1)
可以用if(b & 1)
代替。这样通过“与”运算,速度会快很多。
2.2 迭代解法
递归写法和迭代写法的效率差不多,我更喜欢递归,因为简单吧