8. 快速幂 ----- O(logk)O(logk)
主要用途:计算 mkmk
int qmi(int a, int k, int p){
int res = 1;
while(k){
//当前位不为0是才累积,往往容易忽略此条件导致错误
if(k & 1) res = (LL) res * a % p;//两数相乘可能会爆Int
a = (LL) a * a % p;// 计算后, a平方
k >>= 1;//移去最低位
}
return res;
}
注意:务必记得 mod p, 务必记得 mod p, 否则极易出错!
1. res = (LL) res * a % p;
2. a = (LL) a * a % p
典型例题
快速幂
快速幂求逆元
求组合数II
求组合数III