python-3.x - 计算幂的最有效算法是什么?

标签 python-3.x exponentiation

<分区>

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

目前最有效的算法是什么?

最佳答案

首先,您的标题的答案是未知。这个问题非常难,你可以阅读更多相关内容in this Wikipedia article .实际上几乎每个人都使用 exponentiation by squaring ,包括 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,但对于大指数要快得多。

最后,对于非常大的以固定模数为模的大量乘法计算,将数字置于蒙哥马利形式并使用 Montgomery reduction 可能是有益的.不过,这是更高级的数论,您不需要它。

关于python-3.x - 计算幂的最有效算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58023976/

相关文章:

math - a^b^c 的最后一位

python - 我在 python 中遇到列表退出错误

python - 对大型数据集进行操作

django - 如何将 Tally ERP-9 与 Python 集成

Java:处理求幂

python - 为什么 numpy.power 为小指数返回 0 而 math.pow 返回正确答案?

haskell - 将数字提高到分数(Data.Ratio)幂?

java - 为什么我的程序本应运行时间较短,但运行时间却较长?

python 3.2 UnicodeEncodeError : 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined>

使用 "as"时,Python 循环引用导入不起作用