我编写了一个计算collat​​z猜想的程序,它可以运行,但是不能计算非常大的数字,如何解决这个问题?

时间:2019-05-21 10:33:58

标签: python

Collat​​z猜想是一个著名的无法解决的问题,其中输入一个正整数,如果数字为偶数,则数字减半,如果数字为奇数,则数字乘以3,然后加一个。重复此循环,直到您得到一个重复的模式,该模式始终为4,2,1。

我不知道其他任何方式可以完成此任务,因此我没有尝试其他任何事情。

if n % 2 == 0:
       n = int(n/2)
       steps = steps + 1
       print(n)
else:
       n = int(3*n+1)
       steps = steps + 1
       print(n)

我的程序做得很好,但是我想计算非常大的数字(长页),当我尝试这样做时,出现错误:

OverflowError: integer division result too large for a float

1 个答案:

答案 0 :(得分:3)

此行

n = int(n/2)

进行浮点除法,然后将结果四舍五入为整数。改为这样做:

n = n // 2

然后您将获得没有中间浮点数表示形式的整数除法。您对int的强制

n = int(3*n+1)

是不必要的。

n = 3 * n + 1

也一样。