什么是輾轉相減法
我們小學(應該是小學吧)學過求最大公約數的方法是輾轉相除法,其實還有另一種方法,只是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; }
輾轉相減法一來比較好理解,二來也比較好寫程序,居家旅行必選方法!