【问题标题】:How Can I Fix An Overflow Error From the Calculation In Python 3?如何修复 Python 3 计算中的溢出错误?
【发布时间】:2017-11-27 03:39:42
【问题描述】:

我创建了一个程序来计算带有米尔常数的素数,但无论如何,它会导致进行大量计算。例如,1.306... ** 5661

它会引发溢出错误。我怎样才能解决这个问题?我尝试了 xrange,但它没有帮助我,因为它不再存在于 python 3 中。我不知道如何减少它。

谁能帮帮我?非常感谢!

编辑:这是代码:

theta = 1.3063778838630806904686144926026

bottom = int(input("lower bound: "))
top = int(input("high bound: "))

for i in range(0,top + 1):
    print(round(theta ** (3**i))) # causes the error

【问题讨论】:

  • 将您的代码与问题一起发布,它将帮助其他人了解您的问题的问题
  • 我刚刚发布了代码
  • 你的意思是Mill's constant?米勒是一个不同的素数研究员。
  • range 在 Python 3 中的行为类似于 Python 2 的 xrange。但这不是你的问题。密尔公式产生的数字迅速变得庞大,大到无法放入浮点数。您可以改用decimal 模块,在内存不足之前获取更多值。另一种选择是使用有理数进行计算:将 Mill 常数表示为分数,然后使用// 地板除法将分子除以分母,得到整数答案。

标签: python python-3.x integer-overflow


【解决方案1】:

以下是使用整数计算 Mill 素数的方法。首先,您需要将 Mill 常数写为分数。我使用了来自Wikipedia article 的值之一。

num, den = 1551795687, 1187861266
print(num / den)

for i in range(1, 8):
    e = 3 ** i
    n = num ** e
    d = den ** e
    print(i, n // d)

输出

1.3063778838630806
1 2
2 11
3 1361
4 2521008887
5 16022236204009819034551083884
6 4113101149215105495247660946168530631843333312378291569324941703732418013747202413154
7 69583804376962776892757521964751417769589800913915250464742380681561387050414758147961918413247296927859465626141517084928624751186191429632740787663513270579366994745400890812584434492059975056388739246886951607326825627525396066637918379217513934013930

要执行更准确的计算,您需要使用更好的起始分数,但这会导致 nd 增长得更快。

【讨论】:

    【解决方案2】:

    谢谢@PM 2Ring 和@Blurp!您通过指出十进制模块对我帮助很大,这正是我所需要的!原来 559397567061773305900... 是素数!

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2021-06-11
      • 2019-12-17
      • 1970-01-01
      • 2012-01-04
      相关资源
      最近更新 更多