最大公約數演算法
最大公約數(Greatest Common Divisor, GCD)演算法是用來找出兩個或更多整數的最大公約數。這裡介紹幾種常見的GCD演算法:
-
循環除法(Euclidean Algorithm): 這是最常用的GCD演算法,由歐幾里得提出。演算法的思路是將較大的數不斷除以較小的數,直到得到的最小非負餘數為0。此時,較小的數就是兩個數的最大公約數。
def gcd(a, b): while b != 0: a, b = b, a % b return a
-
質因數分解法: 將兩個數分別分解成質因數的乘積,然後找出共同的質因數,將它們的次方取最小值,最後將這些質因數相乘得到最大公約數。
def gcd(a, b): prime_factors_a = [] prime_factors_b = [] for factor in range(2, int(a**0.5) + 1): if a % factor == 0: prime_factors_a.append(factor) while a % factor == 0: a //= factor if b % factor == 0: prime_factors_b.append(factor) if a != 1: prime_factors_a.append(a) if b != 1: prime_factors_b.append(b) return functools.reduce(lambda x, y: x * y, [min(prime_factors_a.count(p), prime_factors_b.count(p)) * p for p in set(prime_factors_a + prime_factors_b)])
-
快速GCD演算法(Stein's Algorithm): 這是一個優化過的GCD演算法,當兩個數字相差很大時,這個演算法會比循環除法更快。
def gcd(a, b): if a == 0: return b return gcd(b % a, a)
這些演算法中,Euclidean Algorithm是最簡單也是最常用的,而質因數分解法則適用於當兩個數字非常大,且有很多質因數時。快速GCD演算法則是在特定情況下效率更高的選擇。選擇哪種演算法取決於具體的應用場景和數字的性質。