辗转相除法求最大公约数

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的时候求出的余数,就是最大公约数。

posted @ 2020-02-21 16:01  programchen  阅读(640)  评论(0)    收藏  举报