簡體   English   中英

通過迭代解決方案找到最大公約數(python 3)

[英]Finding Greatest Common Divisor through iterative solution (python 3)

我試圖通過使用函數並迭代求解來找到偉大的公約數。 但是,由於某種原因,我不確定為什么我沒有得到正確的輸出。

30和15之間的最大公約數應該是15,但是,我的輸出總是給我錯誤的數字。 我有一種強烈的感覺,我的“如果”陳述是非常錯誤的。 請幫忙!

def square(a,b):
    '''
    x: int or float.
    '''
    c = a + b

    while c > 0:
        c -= 1
        if a % c == 0 and b % c == 0:
            return c
        else: 
            return 1

obj = square(30,15) 
print (obj)

僅當您完成所有數字的迭代並且沒有發現兩個數字的除數時,才應返回一個值:

def square(a, b):
    c = a + b

    while c > 0:
        if a % c == 0 and b % c == 0:
            return c
        c -= 1
    return 1

但是,在這種情況下,不需要最后一次return ,因為ca + b變為1 ,並且mod 1將始終帶來一個公共除數,因此在最壞的情況下,循環將始終以1結尾。

同樣,大於ab的數字也不是它們的公因子。 x mod y for y > x yields x ),而gcd是任務的正式名稱,所以我會選擇

def gcd(a, b):
    for c in range(min(a, b), 0, -1):
        if a % c == b % c == 0:
            return c

用於迭代解決方案。

您可能想知道,有一個基於Euclidian算法的GCD問題的通用遞歸解決方案。

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)

print(gcd(30, 15))
# 15

暫無
暫無

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

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