Python 3.x 什么';计算幂的最有效算法是什么?

Python 3.x 什么';计算幂的最有效算法是什么?,python-3.x,exponentiation,Python 3.x,Exponentiation,我正在通过Python3模拟RSA协议的公钥和私钥设置,我必须处理大量的指数。由于pow(base,exp)似乎没有在合理的时间内运行,我一直在尝试使用不同的算法,但目前似乎没有一种算法起作用 到目前为止,哪种算法最有效?通过平方先前的二进制幂计算基数模n的二进制幂,例如base^2=base^1*base^1;基准^4=基准^2*基准^2 我所说的二进制是指基数^0、基数^1、基数^2、基数^4、基数^8等等 然后,在指数中设置位时,将二进制幂乘以 例如,指数9:base^9=base^1*b

我正在通过Python3模拟RSA协议的公钥和私钥设置,我必须处理大量的指数。由于
pow(base,exp)
似乎没有在合理的时间内运行,我一直在尝试使用不同的算法,但目前似乎没有一种算法起作用


到目前为止,哪种算法最有效?

通过平方先前的二进制幂计算基数模n的二进制幂,例如base^2=base^1*base^1;基准^4=基准^2*基准^2

我所说的二进制是指基数^0、基数^1、基数^2、基数^4、基数^8等等

然后,在指数中设置位时,将二进制幂乘以

例如,指数9:base^9=base^1*base^8。 所有计算均以模n进行

查找附加的伪代码;我希望它是正确的,因为它没有经过测试

//pseudocode
function myPower(base, exponent, n) {
    power = 1;
    binarypower = base;
    while(exponent>0) {
        if(exponent&1 != 0) {
            power = (binarypower * power) %n;
        }
        exponent = exponent>>1;
        if(exponent>0) {
            binarypower = (binarypower*binarypower)%n;
        }
    }
    return power;
}

首先,你的头衔的答案是未知的。这个问题很难解决,你可以多读一些。实际上,几乎每个人都在使用,包括Python的算法

然而,在RSA中,您使用的是模幂运算,我想这就是您出错的地方。如果你计算pow(base,exp)%mod,那会非常慢,因为中间的求幂变得非常大。诀窍是减少每一步的求幂,这是允许的,因为
a*b mod m==((a mod m)*(b mod m))mod m
。这也已经在Python中实现了,通过使用内置的三参数
pow
函数(它不是而不是
math.pow
,只是内置的
pow
):
pow(base,exp,mod)
。此函数在结果上与pow(base,exp)%mod等效,但对于大指数,速度要快得多


最后,对于以固定模进行大量乘法的非常大的计算,将数字以蒙哥马利形式表示并使用是有益的。这是一种更先进的数论,你不需要它。

用基数简单相乘,然后在每次迭代中计算n的模(exp次)。Orip,我找不到任何关于使用蒙哥马利约化可以实现多少速度差的信息,你知道吗,如果是实质性的,我对实施它感兴趣