1. 程式人生 > >你所必須知道的三種基本求兩個數最大公約數的演算法

你所必須知道的三種基本求兩個數最大公約數的演算法

1 迭代法求最大公約數

/*迭代法求最大公約數
*原理:m n r;將r賦值給n,n賦值給m 
*/ 
#include <iostream>
using namespace std;
int Gcd(int m, int n) {
	int r; 
	r = m%n;
	while(r) {
		m = n;
		n = r;
		r = m%n;
	} 
	return n;
} 


int main(){
	int m, n;
	cin >> m >> n;
	cout<< Gcd(m, n);
	return 0;
}

2 歐幾里德遞迴演算法求最大公約數

/*歐幾里德遞迴演算法求最大公約數*/ 
#include <iostream>
using namespace std;
int Gcd(int m, int n);

int RGcd(int m, int n) {
	if(m==0) return n;
	return Gcd(n%m, m);
} 

int Gcd(int m, int n) {
	if(m > n) {
		int t = m;
		m = n;
		n = t;
	}
	return RGcd(m, n);
} 

int main(){
	int m, n;
	cin >> m >> n;
	cout<< Gcd(m, n);
	return 0;
}

3 連續的整數的檢測演算法求最大公約數

/*連續的整數的檢測演算法求最大公約數*/ 
#include <iostream>
using namespace std;
int Gcd(int m, int n) {
	if(m==0) return n;
	if(n==0) return m;
	int t = m > n ? n: m;//把較小的那個數賦值給t
	while(m%t || n%t)
		t--;
	return t; 
} 
int main(){
	int m, n;
	cin >> m >> n;
	cout<< Gcd(m, n);
	return 0;
}