Collat​​z Conjecture程序随机停止以高数字表示的准确性

时间:2018-11-23 04:29:50

标签: python math

因此,在浏览Wikipedia时,我偶然发现了this other SO question,所以我决定编写一个简单的python程序

while True:
x = int(input("Enter a number: "))
n=0

 while True:
     if  (x % 2) == 0:
         x = x/2
         n += 1
         print(x)
     else:
         x = 3*x +1
         n+=1
         print(x)
     if x == 1:
        break
print("N = %d" %(n))

首先,我使用随机数,然后决定测试Wikipedia文章所代表的一些较大的数字。该程序运行良好,直到Wikipedia的“示例”部分上的75,128,138,247,之前它与步骤数完全匹配,然后它随机地对N表示“ 512”(步骤数。我只是不明白为什么。有人可以吗?帮助吗?

1 个答案:

答案 0 :(得分:3)

浮点除法可能会导致问题(注意输出为浮点数),因此请使用整数:

更改

x = x/2  

进行整数除法(您的print对应于Python 3,因此可用)

x = x // 2