(一)辗转相除法的概念、代码及证明

接下来一段时间,我将发表很多关于算法的博客,用 C + + C++ C++编程语言作为示例代码所选用的编程语言。大家可以关注一下哦。

辗转相除法的基本概念

它用来求最大公约数。
基本概念用简单一句话概括就是 g c d ( a , b ) = g c d ( b , ( a % b ) ) gcd(a,b) = gcd(b,(a \% b)) gcd(a,b)=gcd(b,(a%b))
每次将 a a a迭代为 b b b b b b迭代为 a % b a\%b a%b,直到 a % b a\%b a%b为零, b b b为最大公因数。

证明

有一个数 a a a和数 b b b
他们的公约数是 t t t
商(不四舍五入的整数商,如5和2的商是2,不是2.5或者3)为 k k k
a a a就可以表示为 b × k + a % b b×k+a\%b b×k+a%b

如果 t t t a a a b b b的公约数,它应该整除 a a a b b b。若它整除 b b b,那它就也能整除 b × k b×k b×k,现在只用确保它能整除 b b b a a a剩余的 a % b a\%b a%b部分。此时将 a a a迭代为 b b b b b b迭代为 a % b a\%b a%b。直到 a % b a\%b a%b不能再除了, b b b就是最大公约数了。

示例代码

这里仅仅提供函数哦,其它请自行补全

int gcd(int a,int b){
	if(a%b==0)return a;
	gcd(b,a%b);
}

你可能感兴趣的:(算法)