c – 计算p ^ q(求幂)的有效方法,其中q是一个整数 - 代码日志

c – 计算p ^ q(求幂)的有效方法,其中q是一个整数

什么是计算pq的有效方法,其中q是整数?
Exponentiation by squaring仅使用O(lg q)乘法。

template <typename T>
T expt(T p, unsigned q)
{
    T r(1);

    while (q != 0) {
        if (q % 2 == 1) {    // q is odd
            r *= p;
            q--;
        }
        p *= p;
        q /= 2;
    }

    return r;
}

这应该在任何monoid(T,运算符*)上工作,其中由1构成的T是身份元素。这包括所有数字类型。

将其扩展到带符号q是容易的:只需将上述结果除以q的绝对值(但是如通常在计算绝对值时要小心)。

http://stackoverflow.com/questions/5625431/efficient-way-to-compute-pq-exponentiation-where-q-is-an-integer

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 计算p ^ q(求幂)的有效方法,其中q是一个整数