求最大公因數(輾轉相除法&更相減損術)


求最大公因數(輾轉相除法&更相減損術)

輾轉相除法

又名歐幾里得算法 ,其原理其實是基於這個定理:\(gcd(a,b)=gcd(b,a\%b)\)詳細證明,而任何數與0的最大公約數是它本身 (遞歸終止條件),所以可以如下遞歸求出兩數最大公因數:

\[f(a,b)=\left\{ \begin{array}{lll} b \qquad a\%b=0\\ f(b,a\%b) \end{array} \right. \]

遞歸實現(C++):

int f(int a, int b){
	return (b==0)?(a):f(b,a%b);
}

無需判斷a,b的大小關系

更相減損術

出自《九章算術》,其依據原理:兩個正整數a和b(a>b),它們的最大公約數等於a-b的差值c和較小數b的最大公約數,同理,所以可以如下遞歸求出兩數最大公因數:

\[f(a,b)=\left\{ \begin{array}{lll} a \qquad a=b\\ f(b,a-b) \end{array} \right. \]

遞歸實現(C++):

#include <iostream>
#include <algorithm>
using namespace std;
int f(int a, int b){//a>b
	int r=a-b;
	if(r==0)	return b;
	if(r>b)	return f(r,b);
	else	return f(b,r);
}
int main(){
	int a,b;
	cin>>a>>b;
	if(a<b)
		swap(a,b);
	cout<<f(a,b);
	return 0;
}

本文采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處: 轉載自:Santiego的博客


免責聲明!

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



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