尤拉計畫 14

2021-07-25 12:46:49 字數 1323 閱讀 9679

以下迭代序列定義在整數集合上:

n → n/2 (當n是偶數時)

n → 3n + 1 (當n是奇數時)

應用以上規則,並且以數字13開始,我們得到以下序列:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

可以看出這個以13開始以1結束的序列包含10個項。

雖然還沒有被證明(collatz問題),但是人們認為在這個規則下,以任何數字開始都會以1結束。

以哪個不超過100萬的數字開始,能給得到最長的序列?

注意: 一旦序列開始之後,也就是從第二項開始,項是可以超過100萬的。

def

get_collatz_len

(n):

"""

獲取序列長度

儲存各個數字開始的序列,求取新的序列時,從已獲知的序列字典中查詢

"""collatz_list =

while

1: if n in collatz_len_dict:

for i, collatz in enumerate(collatz_list):

collatz_len_dict[collatz] = len(collatz_list) - i + collatz_len_dict[n]

return collatz_len_dict[n] + len(collatz_list)

if n % 2:

n = 3 * n + 1

else:

n //= 2

#def get_len(n):

# """ 獲取序列長度 """

# collatz_len = 1

# while n != 1:

# if n % 2:

# n = 3 * n + 1

# else:

# n /= 2

# collatz_len += 1

# return collatz_len

# 儲存各個數字開始的序列

collatz_len_dict =

len_max = 0

i_collatz = 0

for i in range(1, 10 ** 6):

i_len = get_collatz_len(i)

if i_len > len_max:

len_max = i_len

i_collatz = i

print(i_collatz)

尤拉計畫 6

前十個自然數的平方和是 1 2 2 2 10 2 385 前十個自然數的和的平方是 1 2 10 2 552 3025 所以平方和與和的平方的差是3025 385 2640.找出前一百個自然數的平方和與和平方的差。def get square sub x 遞迴,展開行列式 if x 1 return...

尤拉計畫 15

從乙個2 2網格的左上角開始,有6條 不允許往回走 通往右下角的路。對於20 20的網格,這樣的路有多少條?def get load num x,y x,y 網格的路數等於 x 1,y x,y 1 if x 0 or y 0 return 1return get xy load x 1,y get ...

尤拉計畫 17

如果用英文寫出數字1到5 one,two,three,four,five,那麼一共需要3 3 5 4 4 19個字母。如果數字1到1000 包含1000 用英文寫出,那麼一共需要多少個字母?注意 空格和連字元不算在內。例如,342 three hundred and forty two 包含23個字...