快速幂
目的:快速求a的b次方
假设我们要求a^b,如果使用暴力就是把a连乘b次,这样一来时间复杂度是O(n),快速幂能做到O(logn)。原理如下:
要求a^b ,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),
例如当b==11时,a^11 = a^(2³×1 + 2²×0 + 2¹×1 + 2º×1)。
因此,我们将a¹¹转化为算
以b==11为例,b=>1011,二进制从右向左算
long long inv(long long a, long long b, long long mod){
long long res = 1;
while(b){
if(b & 1) res = (res*a)%mod;
a = (a*a)%mod;
b>>=1;
}
return res;
}