【问题标题】:Is there a faster method for multiplying very large integers or storing them in many caches/variables instead of one to improve performance?是否有更快的方法来乘以非常大的整数或将它们存储在许多缓存/变量中而不是一个以提高性能?
【发布时间】:2022-11-21 05:32:32
【问题描述】:
def exponentiation(base,n):
    if n == 0:
        return 1
    if n % 2 == 0:
     return exponentiation(base*base, n/2)
    else:
        return base * exponentiation(base * base, (n-1)/2)

if __name__ == '__main__':
    print(len(str(exponentiation(2, 66666666))))

对于非常大的整数,计算机在求数字乘积时会变得非常迟钝;而且我知道 1 GB 的 RAM 可以存储至少 2^8000000000 位数字,但是这个程序在达到这个限制之前就变慢了。

我希望使用平方求幂来提高程序进行乘法运算的速度,但似乎程序存储如此大的整数时出现了问题。

【问题讨论】:

  • 如果你想知道的是2^66666666的位数,我想可能有比实际计算2^66666666更好的算法。
  • 没有什么可以存储那么多数字正如你所说。一个 GB 有 8_000_000_000 位,因此它可以存储那么多二进制数字,这些数字可以表示 2^800000000 个不同的数字,但您可以只存储其中一个。
  • 在您的代码中添加一些打印,以查看它从哪里开始卡住以及卡住多长时间。获取字符串表示很可能不是一个好主意,因为该字符串有超过 2000 万个字符。

标签: python


【解决方案1】:

是的,有一个更快的方法:

exponentiation = pow

这大约是您的方法的两倍,并且它也适用于非整数。

不过,代码中的求幂时间可以忽略不计。它的大部分时间都花在将整数转换为字符串上。如果您想要整数的位数,请改用int(math.log10(n)) + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2011-03-27
    相关资源
    最近更新 更多