一、判斷最大公約數:
我想到的:
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