如何提高此算法的效率?

时间:2016-02-23 20:43:00

标签: python encryption module overflow long-integer

我有一段代码不符合我的要求。

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.我认为这里的问题与溢出问题有关。但是我不知道如何解决它

1 个答案:

答案 0 :(得分:2)

您要构建的内容称为模幂运算,并且有一个优化的算法可以避免精度损失和随后的错误结果:

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,它已经这样做了。但是当你问到如何提高效率时,就是这样。