Python中的连续广场

时间:2013-07-22 14:33:02

标签: python math

我在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时。有人可以暗示我做错了吗?

2 个答案:

答案 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)

我认为你的参数顺序错了。第三个参数是指数;第二个是模数。那可能不是你想要的。