递归版本
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&1) //替换b%2==1,位与操作速度更快
return a*binaryPow(a,b-1)%m;
else{
//b为偶数,转为b/2
ll mul = binaryPow(a,b/2,m);
return mul*mul%m;
}
}
非递归版本
ll binaryPow(ll a,ll b,ll m)
{
ll ans=1;
while(b>0)
{
if(b&1)
{
ans=ans*a%m;//若b为奇数则ans累积上a
}
a=a*a%m;
b>>=1;//位移操作,比b/2要快
}
return ans;
}