克拉茲問題是一個簡單有趣而又沒有解決的數學問題。這個問題是由L. Collatz在1937年提出的。 問題如下: (1)輸入一個正整數n; (2)如果n=1則結束; (3)如果n是奇數,則n變為3n+1,否則n變為n/2; (4)轉入第(2)步。 舉一個例子:n=13的時候,經歷10步可以達到1。 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 25.請問10000以內,哪個數變為1需要轉化的步驟多。 26.請問1000000以內,哪個數變為1需要轉化的步驟多。
"""@author: vllen"""def v2k(v, dict0): '''v_max2k''' for k in dict0.keys(): if dict0[k] == v:#默認最大值時key唯一,不然list.append return kdef colla(num): '''main''' dict1 = {} for i in range(1, num+1): ii = i m = 0 while i > 0: if i == 1: break if i > 1 and i % 2 == 0: i = i / 2 m = m + 1 elif i > 1 and i % 2 != 0: i = 3*i + 1 m = m + 1 dict1[ii] = m v_max = max([x for x in dict1.values()]) return v2k(v_max, dict1)colla(1000000)新聞熱點
疑難解答