如何提高该算法的效率?
How can I improve the efficiency of this algorithm?
我有以下代码段没有按照我想要的方式运行。
def cipher(plaintext, arr):
import math
ciphered = []
for letter in plaintext:
ciphered.append(math.pow(ord(letter)-65,arr[1]%arr[0]))
return ciphered
到达 math.pow 的参数是 142 和 35。然后它使用该结果找到带有 221 的模块。但是它给我的结果是 206.0,而它应该给出的结果我是 12。即使我在 wolfram alpha 中找到这个结果,结果也是 12。我认为这里的问题与溢出问题有关。但是我不知道怎么解决
您正在尝试构建的称为模幂运算,并且有一个针对它的优化算法可以避免精度损失和随后不正确的结果:
def pow_mod(b, e, m):
"""Compute (b^e) mod m."""
c, e_ = 1, 0
while e_ < e:
e_ += 1
c = (b*c) % m
return c
编辑(感谢@user2357112):
...或者您可以只使用内置的 pow
,它已经这样做了。不过看你问怎么提高效率,原来是这样。
我有以下代码段没有按照我想要的方式运行。
def cipher(plaintext, arr):
import math
ciphered = []
for letter in plaintext:
ciphered.append(math.pow(ord(letter)-65,arr[1]%arr[0]))
return ciphered
到达 math.pow 的参数是 142 和 35。然后它使用该结果找到带有 221 的模块。但是它给我的结果是 206.0,而它应该给出的结果我是 12。即使我在 wolfram alpha 中找到这个结果,结果也是 12。我认为这里的问题与溢出问题有关。但是我不知道怎么解决
您正在尝试构建的称为模幂运算,并且有一个针对它的优化算法可以避免精度损失和随后不正确的结果:
def pow_mod(b, e, m):
"""Compute (b^e) mod m."""
c, e_ = 1, 0
while e_ < e:
e_ += 1
c = (b*c) % m
return c
编辑(感谢@user2357112):
...或者您可以只使用内置的 pow
,它已经这样做了。不过看你问怎么提高效率,原来是这样。