Python 判斷公約數、公倍數


一、判斷最大公約數:

我想到的:

def hcf(x,y):
    if x > y :
        small = y
    else:
        small = x
    for i in range(small,1,-1):
    # for i in range(1,small + 1):
        print("Inter i word", i)
        if x % i == 0 and y % i == 0:
            print("Max",i)
            break

一開始我想到的是我注釋的那一行,就是正取值,舉例:12和24,結果為循環的最后一次的值:12,我想循環這么多次,在開發中,浪費太大,我反過來循環取值,

第一次不就取到了,就是現在運行的。后來又想到一對數值:24,39,這種情況下,正循環比反循環循環次數更少。所以想是否有更好的方法。

我搜到的:輾轉相除法(自認為效果最好的)

def gcd(x, y):
    m = max(x, y)
    n = min(x, y)
    while m%n:
        m, n = n, m%n
    return n

 歐幾里得算法又稱輾轉相除法,是指用於計算兩個非負整數a,b的最大公約數

二、判斷公倍數

def MinNum(x,y):
    m = max(x,y)
    while True:
        if (m % x == 0) and (m % y == 0):
            MinNum = m
            break
     m += 1
    return MinNum

這是我一開始想到的,感覺要是數字過大,循環次數過多,又想到輾轉相除法的到最大公約數,得到下面方法:

def gbs(x,y):
    m = max(x,y)
    n = min(x,y)
    while m % n :
        m,n = n,m%n
    return (x // n) * (y // n) * n

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM