整数快速幂(原理+模板)

原理

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/108305162
今日推荐