1 递归写法
//递归写法
ll binaryPow1(ll a,ll b,ll m){
if(b==0) return 1; //如果b为0,那么a^0=1
//b为奇数,转换为b-1
if(b%1==1) return a*binaryPow1(a,b-1,m)%m;
else{
ll mul=binaryPow1(a,b/2,m);
return mul*mul%m;
}
}
2 迭代写法
//迭代写法
ll binaryPow2(ll a,ll b,ll m){
ll ans=1;
while(b>0){
if(b&1){ //如果b的二进制末尾为1
ans=ans*a%m; //ans乘上a
}
a=a*a%m; //令a平方
b>>=1; //令b的二进制右移一位
}
return ans;
}