快速幂 (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.;这样执行速度会快一点

posted @ 2020-08-25 19:06  XA科研  阅读(222)  评论(0编辑  收藏  举报