问题描述
我的代码的瓶颈是对非常大的整数重复调用 pow(base,exponent,modulus)(numpy 不支持这么大的整数,大约 100 到 256 位)。 但是,我的指数和模数总是相同的。我可以以某种方式利用它来加速自定义函数的计算吗? 我试图定义一个如下所示的函数(下面的函数用于通用模数和指数)。
然而,即使我对每个操作进行硬编码,而没有针对固定指数和模数的 while 循环和 if 语句,它也比 pow 慢。
def modular_pow(self,base,modulus):
result = 1
base = base % modulus
while exponent > 0:
if (exponent % 2 == 1):
result = (result * base) % modulus
exponent = exponent >> 1
base = (base * base) % modulus
return result
另一种选择是,如果我能以某种方式“矢量化”它。我必须计算大约 100000000 个不同基值的 pow。虽然这些值经常在我的脚本运行之间发生变化(因此查找表将没有用),但我会在我运行的那一刻知道这些值(我可以一次计算它们)。
有什么想法吗? 我通过使用 gmpy2 的 mpz 数据类型获得了一些加速,但它仍然太慢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)