考拉茲猜想,又被稱為3n+1問題,是個目前仍末解決的數學問題。以下是有關此問題的描述:是指對於每一個正整數n,如果它是奇數,則對它乘3再加1,如果它是偶數,則對它除以2,如此循環,最終都能夠得到。 假設現在n=6,則這個n將會依照以下序列改變:[6,3,10,5,16,8,4,2,1],總共有8個步驟,9個數值,根據上面的定義,我們可以用一個簡單的python程式碼來計算從1~100的n值變化 for n in range (1, 101):#讓n由1跑到100 while n != 1:#只要n不等於1 就持續做。 if n$ 2==1:#當n是奇數 n=n*3+1 else:#當n是偶數 n=n/2 這個猜想早在1930年代便已由考拉茲提出。在計算機科學如此發達的近代,直至今日依舊找不到任何不會收斂至1的正整數,卻也找不到任何規律證明這個猜想是正確或錯誤的。 現在請你修改上面己提供給你的程式碼,用串列儲存每個步驟的結果,或是使用新的變數儲存所有計算的步驟數並儲存在串列中,請你分別建立兩張圖表,分別為指定正整數的數值趨勢圖,以及各個正整數的步驟數趨勢圖。python
时间: 2023-06-24 17:03:41 浏览: 33
以下是修改後的程式碼,將每個步驟的結果儲存在一個串列中:
```
import matplotlib.pyplot as plt
step_counts = [] # 用來儲存每個正整數的步驟數
results = [] # 用來儲存每個正整數的步驟結果
for n in range(1, 101):
steps = [] # 用來儲存當前正整數的步驟結果
while n != 1:
steps.append(n) # 將當前正整數加入步驟結果串列
if n % 2 == 1:
n = n * 3 + 1
else:
n = n // 2
steps.append(1) # 將最終結果 1 加入步驟結果串列
results.append(steps) # 將當前正整數的步驟結果加入 results 串列
step_counts.append(len(steps)) # 將當前正整數的步驟數加入 step_counts 串列
# 繪製指定正整數的數值趨勢圖
plt.plot(range(1, 101), step_counts)
plt.xlabel("正整數")
plt.ylabel("步驟數")
plt.title("指定正整數的數值趨勢圖")
plt.show()
# 繪製各個正整數的步驟數趨勢圖
for i, steps in enumerate(results):
plt.plot(steps, label=str(i+1))
plt.xlabel("步驟")
plt.ylabel("正整數")
plt.title("各個正整數的步驟數趨勢圖")
plt.legend()
plt.show()
```
第一個圖表顯示了指定正整數的數值趨勢,也就是每個正整數所需要的步驟數。
第二個圖表顯示了各個正整數的步驟數趨勢,也就是每個正整數每個步驟的結果。每條線代表一個正整數的步驟結果。