关于快速幂的两种方法:
1.递归算法:只要掌握一个精髓:
递归相对来说比较好理解:代码如下:
typedef long long LL;
//求a^b % m ,递归写法;
LL binaryPow(LL a,LL b,LL m){
if(b == 0) return 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;
}
}
2.迭代算法:
较难理解,但其实就是把次方数当成二进制,如果是1,就将当时的底数存起来,每次底数平方即可;
代码如下:
//求 a^b % m ,迭代写法;
LL binaryPow(LL a,LL b,LL m){
LL ans=1;
while{b>0}{
if(b & 1) ans=ans*a % m;
a=a*a%m;
b>>=1;
}
return ans;
}