快速幂 (C++)
1 typedef long long LL; 2 using namespace std; 3 4 //求a^b%m,递归写法 5 LL binaryPow(LL a,LL b,LL m){ 6 if(b==0){ //如果b为0,那么a^0=1 7 return 1; 8 } 9 else if(b%2==1){ //b为奇数,转换为b-1 10 return a*binaryPow(a,b-1,m)%m; 11 } 12 else{ //b为偶数,转换为b/2 13 LL mul=binaryPow(a,b/2,m); 14 return LL*LL%m; 15 } 16 17 }
注:上述代码中,条件if(b%2==1)可以用if(b&1)代替,这是因为b&1进行位操作,判断b的末位是否为1.;这样执行速度会快一点