冰雹猜想


  前段時間在看《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個位置到最后一個位置就是它的序列。

  是否已有天才看出,這到底有神馬規律么???


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM