任意取一个正整数n,如果n是一个偶数,则除以2得到n/2;
如果n是一个奇数,则乘以3加1得到3n+1,重复以上操作,我们将得到一串数字。
例如,取一个正整数n=3,3是奇数,得到3*3+1=10,10是偶数,得到10/2=5。重复上述操作,我们将得到一串数字:
3->10->5->16->8->4->2->1->
继续从1开始操作,我们得到1->4->2->1,再次回到了1。
从而将出现了1->4->2->1的循环。
因此Collatz猜想:任何正整数n参照以上规则,都将回归1.
我们再看一个例子。取n=19,我们得到如下一串数字:
19->58->29->88->44->22->11->34->17->52->26->13->40->20->10->5->16->8->4->2->1->
今天我们借助于计算机程序,对于2^60以下的正整数,collatz猜想都是正确的。有些数字需要经历很长的路才会回归1,例如n=27,需要经历111步:
27->82->41->124->62->31->94->47->142->71->214->107->322->161->484->242->121->364->182->91->274->137->412->206->103->310->155->466->233->700->350->175->526->263->790->395->1186->593->1780->890->445->1336->668->334->167->502->251->754->377->1132->566->283->850->425->1276->638->319->958->479->1438->719->2158->1079->3238->1619->4858->2429->7288->3644->1822->911->2734->1367->4102->2051->6154->3077->9232->4616->2308->1154->577->1732->866->433->1300->650->325->976->488->244->122->61->184->92->46->23->70->35->106->53->160->80->40->20->10->5->16->8->4->2->1->
The number of steps of 27 is 111. 在回归1的途中,最大值为9232.
今天Collatz猜想(也称为3n+1问题或冰雹猜想)仍未得到解决,3n+1问题是培养数字敏感性和探索数字世界奥秘的好问题,同时也是练习程序思维的好问题。
附Python程序代码
def c(n):
def rule(n):
if n==1:
return 1
elif n%2==0:
return n//2
else:
return 3*n+1
s=0
print(n,end='->')
i=n
while i!=1:
i=rule(i)
s=s+1
print(i,end="->")
print('\n The number of steps of {} is {}.'.format(n,s))
执行此代码,例如输入c(10)得到如下结果: