要背的模板
3^5(base^power)
将5写成2进制,即 101,从右往左第 i 位为base的 2 ^ i 倍
即3^5 = ( 3^(2^0) ) * ( 3^(2^2) )
3^15 = 3^(1111) = ( 3^(2^0) ) * ( 3^(2^1) )*( 3^(2^2) ) * ( 3^(2^3) )
基于二进制原理,ans初始为1,然后不断对power右移,如果power末位为1,ans乘上power这一位对应的base (每右移一位base乘2)
const int mod=1e9+7;
typedef long long ll;
ll ksm(ll base,ll power){ //底数是base,指数是power
ll ans=1; //记录结果
while(power){
if(power&1){ //二进制末位是1,把ans乘上当前的base
ans=(ans*base)%mod;
}
power>>=1; //每次power二进制右移一位
base=(base*base)%mod; //base代表的值翻倍
}
return ans;
}