辗转相除法求最大公约数
1 int gcd(int a,int b)
2 {
3 if (b == 0)return a;
4 else return gcd(b, b%a);
5 }
这个是递归的代码,看着也就两行,感觉代码是很简单的,在这里我主要是整理一下辗转相除法的思路。
我们是求最大公约数,就可以将公约数设为c,这里两个数分别为a和b。
所以就有这个关系 a=kc , b=mc。
在这里我们假设a比b大,求a减b的差值,将差值设为x。
a-b=x , 变形为 kc-mc=x 再变形为 x=c(k-m)。
在这里就可以看出a与b的余数也是公约数的倍数。
所以我们进行辗转相除,在使得b为0的时候求出的余数,就是最大公约数。

浙公网安备 33010602011771号