Collatz猜想是一个著名的无法解决的问题,其中输入一个正整数,如果数字为偶数,则数字减半,如果数字为奇数,则数字乘以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
答案 0 :(得分:3)
此行
n = int(n/2)
进行浮点除法,然后将结果四舍五入为整数。改为这样做:
n = n // 2
然后您将获得没有中间浮点数表示形式的整数除法。您对int
的强制
n = int(3*n+1)
是不必要的。
n = 3 * n + 1
也一样。