【发布时间】:2020-10-08 05:12:37
【问题描述】:
我遇到了问题,因为我无法在有效时间内运行它。我知道 % 很慢,所以我尝试了以下方法:
((a * x + b) % P) % n
divmod(divmod(a * x + b, P)[1], n)[1]
subeq = pow(a * x + b, 1, P)
hash = pow(subeq, 1, self.n)
所有这些功能对于我想要做的事情来说都太慢了。有没有更快的方法只使用我不知道的基础库来进行 mod 划分?
编辑 详细地说,我将运行这个函数大约 200000 次(或更多),我需要在 4 秒内完成所有 200000 次运行。这些方法都没有在那个球场上(需要几分钟)
【问题讨论】:
-
您测量了哪些性能,您需要什么?
-
请查看我的编辑
-
用numpy怎么样?您可以创建一个 x 的向量(如果需要,可能还可以是 a 或 b)并一次运行几个 10000(或更多)计算作为向量算术。
-
必须是基础python。不允许额外的库
-
你的数字有多大?您需要任意精度,还是它们都适合 32 位或 64 位机器整数? FWIW,Python 函数调用相对较慢 - 它们比简单的 C 函数调用具有更多开销。许多标准函数是用 C 编写的,因此它们比调用 Python 实现的代码要快,但即便如此,调用函数的代码通常比只使用运算符的等效代码慢。 IOW、
pow和divmod并不比使用**或%快。