在python中的pow(x,y,z)和x ** y%z速度的模糊性3.哪一个是有效的?

时间:2017-11-14 01:22:46

标签: python-3.x numbers long-integer pow processing-efficiency

结果与预期不符。 pow(x,y,z)必须高效,但结果会改变。为什么呢?

import timeit
print(timeit.timeit("pow(2505626,1520321,2700643)"))
output:3.700144177302718
print(timeit.timeit("pow(2505626,1520321,2700643)",number=1000000))
output:4.591832527890801
print(timeit.timeit("2505626**1520321%2700643",number=1000000))
output:0.014752348884940147

1 个答案:

答案 0 :(得分:0)

确实pow()在整数上没有很好的表现(在三个参数形式中)。请参阅函数的docstring:

代码:

def pow(*args, **kwargs): # real signature unknown
    """
    Equivalent to x**y (with two arguments) or x**y % z (with three arguments)

    Some types, such as ints, are able to use a more efficient algorithm when
    invoked using the three argument form.
    """
    pass