为什么pow(x,y,z)比(x ^ y)%z更有效?

时间:2015-01-20 00:24:35

标签: performance pow

在许多编程语言中,第一种语言更快。这是为什么?

1 个答案:

答案 0 :(得分:3)

pow(x,y,z)通常像这样(Java)实现:

int pow(int x, int y, int mod) {
    long res = 1, p = x;
    while (y > 0) {
        if (y%2 == 1) {
            res = (res*p)%mod;
        }
        p = (p*p)%mod;
        y /= 2;
    }
    return (int)res;
}

它具有O(log y)复杂度,与使用y乘法直接实现的情况相比,O(y)要好得多。

第二个好处是,当操作结果超过机器字(32或64位)的大小时,某些语言将使用长算术。因此,在直接实现的情况下,可能会首先计算大量x^y,然后才会采用模z