相关疑难解决方法(0)

为什么pow(a,d,n)比**d%n快得多?

我试图实施Miller-Rabin素性测试,并且很困惑为什么中等数字(~7位数)需要这么长时间(> 20秒).我最终发现以下代码行是问题的根源:

x = a**d % n
Run Code Online (Sandbox Code Playgroud)

(where a,dn都是相似的,但是不相等的,中等数字,**是取幂运算符,并且%是模运算符)

然后我尝试用以下内容替换它:

x = pow(a, d, n)
Run Code Online (Sandbox Code Playgroud)

相比之下它几乎是瞬间完成的.

对于上下文,这是原始函数:

from random import randint

def primalityTest(n, k):
    if n < 2:
        return False
    if n % 2 == 0:
        return False
    s = 0
    d = n - 1
    while d % 2 == 0:
        s += 1
        d >>= 1
    for i in range(k):
        rand = randint(2, n - 2)
        x …
Run Code Online (Sandbox Code Playgroud)

python performance pypy

110
推荐指数
3
解决办法
1万
查看次数

Python中内置的pow()和math.pow()之间的差异?

在两个float参数的情况下,Python的内置pow(x, y)(没有第三个参数)和返回的值返回的结果是否有差异.math.pow()

我问这个问题,因为文件math.pow()暗示pow(x, y)(例如x**y)在本质上是一样的math.pow(x, y):

math.pow(x,y)

返回x上升到幂y.特殊情况尽可能遵循C99标准的附录'F'.特别是,即使x为零或NaN,pow(1.0,x)和pow(x,0.0)也总是返回1.0.如果x和y都是有限的,x是负的,y不是整数,则pow(x,y)是未定义的,并引发ValueError.

在版本2.6中更改:1**nan和nan**0的结果未定义.

注意最后一行:文档暗示行为math.pow()是指数运算符**(因此pow(x, y))的行为.这是官方保证吗?

背景:我的目标是提供一个实现这两个内置的pow()math.pow()对不确定性的数字,在以同样的方式表现与常规的Python花车(相同的数值结果,同样的例外,拐角情况相同的结果,等等).我已经已经实现的东西,工作得很好,但也有一些角落情况下,需要进行处理.

python math

62
推荐指数
3
解决办法
4万
查看次数

python x中的指数.**y vs math.pow(x,y)

哪一个使用math.pow或**运算符更有效?我什么时候应该使用另一个?

到目前为止我知道x**y可以返回一个int或者float如果你使用十进制函数pow将返回一个浮点数

import math

print math.pow(10, 2)

print 10. ** 2
Run Code Online (Sandbox Code Playgroud)

python math built-in pow

40
推荐指数
5
解决办法
4万
查看次数

标签 统计

python ×3

math ×2

built-in ×1

performance ×1

pow ×1

pypy ×1