前段時間在看《Python編程快速上手-讓繁瑣工作自動化》這本書,每章都會有一點習題,其中第三章有個叫“Collatz 序列”的習題,就是著名的冰雹猜想(其實我是學習了Python后才知道有這個數學問題的額~~)。
百度了這個冰雹猜想,有數學家對億級自然數做了檢驗,目前仍然無解。
對這個習題寫了兩套代碼,
1、第一套是隨機輸入任意整數得到其序列
def collatz(number): if number % 2 == 0: #偶數 number=number//2 #整除 print(number) else: #奇數 number = 3 * number + 1 print(number) return number #不加會默認返回None值,所以要指明return number參數 #開始冰雹猜想 print('請輸入任意正整數:') while True: try: number = int(input()) if number>0: while number != 1: number = collatz(number) break elif number<=0: #如果輸入負數或零,提示 print('數據類型有誤, 請重新輸入:') continue except: #如果輸入小數或其他非數字字符,提示 print('數據類型有誤, 請重新輸入:')
運行一下像這樣:
2、第二套是輸入起始和結束數字,計算出這個區間所有整數的序列
def collatz(number): if number % 2 == 0: #偶數 number=number//2 #商數取整 #print(number) list.append(number) else: #基數 number = 3 * number + 1 #print(number) list.append(number) return number #不加會默認返回None值,所以要指明return number參數 #開始冰雹猜想 a=int(input('請輸入起始數字:')) b=int(input('請輸入結束數字(不包含):')) for number in range(a,b): list=[] #每計算完一個數字,清空列表 list.append(number) #列表第0個位置先加進要計算的數字 while number != 1: number = collatz(number) print(list)
運行一下像這樣:
第0個位置是要計算的數字,第1個位置到最后一個位置就是它的序列。
是否已有天才看出,這到底有神馬規律么???