顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
比如我们要求12^11,我们其实可以求12 ^ (2 ^ 0+2 ^ 1+2 ^ 3)
ll fastpow(ll x,ll y) { //求取x^y
ll res=1;
while(y) {
if(y%2==1) {//为奇数,当前最低位为1,res就要乘以当前位置的权重
res*=x;
}
x*=x; //每右移一次,最低位的权重都要乘以x
y/=2; //右移
}
return res;
}