typedef long long LL;
LL poww(LL a,LL b){
LL r=1,base=a;
while(b){
if(b&1) r*=base;
base*=base;
b>>=1;
}
return r;
}
假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时
11的二进制是1011, ,因此,我们将a11转化为
base*=base解析
base*base = base2,下一步相乘:base2*base2 = base4。
base -> base2-> base4 ->base8 ->… 从而实现了 的转变。