求最大公公約數(最大公因數)—— 歐幾里得演算法

风陵南發表於2024-10-16

求最大公因數

求兩數的最大公因數通常的做法是對兩個數因式分解,找出共同的素數,然後求出最大公因數(GCD)。但是當數字越大時,因式分解就越困難,此時,使用歐幾里得演算法就能高效求出其最大公因數。

歐幾里得演算法

歐幾里得演算法(又稱輾轉相除法)用於計算兩個數的最大公因數,被稱為是世界上最古老的演算法。

基本思想

兩個正整數ab,它們的最大公約數(gcd(a,b))ba除以b得到的餘數的最大公約數(gcd(b,a%b))相同。

透過不斷用較小的數替換較大的數,並取餘數,最終在餘數為0時找到最大公約數。

舉例說明

以求1112695這兩個數的最大公約數為例:

  • 首先用較大的數字除以較小的數字,求出餘數,也就是堆兩個數字進行模運算。得到餘數417

  • 接下來再用除數695和餘數417進行模運算,結果為278

  • 繼續進行同樣的操作,對417278作模運算,結果為139。

  • 278139作模運算,結果為0,也就是說278可以被139整除。

  • 餘數為0時,最後一次運算中的除數139就是1112695的最大公約數。

演算法實現

#include "iostream"
using namespace std;
/*歐幾里得演算法—求最大公約數—迭代實現*/
int gcd(int a, int b){
	while (b != 0){
		int tmp = a;
		a = b;
		b = tmp % b;
	}
	return a;
}
/*歐幾里得演算法—求最大公約數—遞迴實現*/
int gcd_dg(int a, int b){
	return b == 0 ? a : gcd_dg(b, a % b);
}

int main(){
	cout << gcd(1112, 695) << endl;
	cout << gcd_dg(1112, 695) << endl;
	system("pause");
	return 0;
}

相關文章