辗转相减法求最大公约数
什么是辗转相减法
我们小学(应该是小学吧)学过求最大公约数的方法是辗转相除法,其实还有另一种方法,只是12年义务教育都没有提到过,那就是辗转相减法。它的基本原理是:大数减小数,直到两数相等时,即为最大公约数。
举个栗子
a b |a - b|
88 156
88 68 156 - 88
20 68 88 - 68
20 48 68 - 20
20 28 48 - 20
20 8 28 - 20
12 8 20 - 8
4 8 12 - 8
4 4 8 - 4
a == b => 4为最大公约数
递归实现
int GCD(int a, int b) { if (a == b) return a; else if (a > b) return GCD (a, b); else return GCD(b, a); }
迭代实现
int GCD(int a, int b) { while(a == b) { if (a > b) a -= b; else b -= a; } return a; }
辗转相减法一来比较好理解,二来也比较好写程序,居家旅行必选方法!