我在python中编写一个程序,涉及将数字提高到极高的指数。为此,我试图实现连续的平方方法来降低计算时间并消除溢出错误的风险。
连续方块意味着与base**exponent % modulo
做同样的事情,我写的当前函数是:
def ssp(b, m, n):
ssp = 1
while n>0:
if n % 2 == 1:
ssp = b*ssp % m
b = b**2 % m
n = n // 2
return ssp
当我用ssp(7, 13, 93)
测试函数时,我得到8的答案,当它应该是19时。有人可以暗示我做错了吗?
答案 0 :(得分:4)
你在做pow(7, 93, 13)
=> 8
但你想要的是pow(7, 13, 93)
=> 19
交换你的函数的第二个和第三个参数。
>>> def ssp(b, n, m):
... ssp = 1
... while n>0:
... if n % 2 == 1:
... ssp = b*ssp % m
... b = b**2 % m
... n = n // 2
... return ssp
...
>>> ssp(7, 13, 93)
19
答案 1 :(得分:1)
我认为你的参数顺序错了。第三个参数是指数;第二个是模数。那可能不是你想要的。