簡體   English   中英

使用找到除數的 function,找到任意兩個給定兩個正整數的最大公約數

[英]Using a function that finds divisors, find the greatest common divisor of any two given two positive integers

這是我到目前為止所擁有的

def div(x):
    A=[]
    for i in range(1,x):
        if x%i==0:
            A.append(i)
    print(A)
div(45)
div(50)
n=0
for i in range(1, min(45, 50)+1): 
    if 45%i==50%i==0: 
        n+=1
print(max(n))
TypeError                                 Traceback (most recent call last)
<ipython-input-8-80ad9173d3fa> in <module>
     11     if 45%i==50%i==0:
     12         n+=1
---> 13 print(max(n))

TypeError: 'int' object is not iterable

我嘗試了多種邏輯,但最終都出現了一些錯誤。 這是最合適的。 我還是個新手,所以一個簡單的程序仍然給我帶來了問題。 這個問題只是用來測試我們的邏輯構建。

您的行n=0將名稱n定義為 integer。 然后稍后您嘗試執行print(max(n))

換句話說,您嘗試計算單個 integer 的max() 這就是引發您的錯誤消息的原因。 max() 的文檔給出了 max() max()兩種有效用法:單個可迭代(例如列表)或多個值(例如整數)。 不允許使用單個 integer。

我不確定你的意圖是什么,所以我不能建議你對你的程序做一點小改動。 我建議你改變你的方法。 相反,您可以這樣做:

  1. 對兩個整數中的每一個調用div() ,從而產生兩個除數列表。
  2. 將每個列表轉換為Python 集
  3. 計算這兩組的交集(有關執行此操作的操作,請參見上一個鏈接)。 你現在有一組公約數。
  4. 在該交集中找到最大值。 由於集合是可迭代的,因此max()將在該集合上工作。 得到的最大值是你的最大公約數。

代碼應該很容易編寫。 如果您有困難,請展示您的嘗試並尋求更多幫助。

順便說一句,您的div function 不正確。 范圍的上限應該是x + 1以包含數字x作為除數 - 任何 integer 都會自行除。 而不是打印列表, div()應該將列表返回給調用例程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM