Python:为固定的 exp 和 mod 或矢量化加速 pow(base,exp,mod)

问题描述

我的代码的瓶颈是对非常大的整数重复调用 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 (将#修改为@)