我有一段代码不符合我的要求。
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.我认为这里的问题与溢出问题有关。但是我不知道如何解决它
答案 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
,它已经这样做了。但是当你问到如何提高效率时,就是这样。