原理
求 x N x^N xN时,根据n的二进制位数,分为 x n 1 + x n 2 + x n 3 + x n 4 … … x^{n1}+x^{n2}+x^{n3}+x^{n4}…… xn1+xn2+xn3+xn4……
例如:在求 x 18 x^{18} x18时,我们可以拆分成 x 16 x^{16} x16、 x 2 x^2 x2的乘积。我们观察18的二进制数(10010),发现二进制第 i 位上的值为 1 ,在乘积中就要有 x 2 i x^{2^i} x2i 的一项。据此我们可以利用遍历二进制数的每一位快速求出 x N x^N xN。
模板
int qmi(int x, int n) // 快速幂模板
{
int res = 1;
while (n)
{
if (n & 1) res = (LL)res * x ;
x = (LL)x * x ;
n >>= 1;
}
return res;
}