greatest common divisor(最大公約數)算法
1.歐幾里得算法函數
歐幾里德算法又稱展轉相除法,用於計算兩個正整數a,b的最大公約數。spa
int gcd(int a,int b){ if (a < b) std::swap(a, b); return b == 0 ? a : gcd(b, a % b); }
Python:設計
函數內遞歸code
1 def gcd(a, b): 2 if a < b: 3 a, b = b, a 4 while b != 0: 5 a,b = b,a%b 6 return a
函數遞歸:blog
1 def gcd(a, b): 2 if b == 0: 3 return a 4 return gcd(b, a % b)
2.Stein算法:遞歸
1 def gcd_Stein(a, b): 2 if a < b: 3 a, b = b, a 4 if (0 == b): 5 return a 6 if a % 2 == 0 and b % 2 == 0: 7 return 2 * gcd_Stein(a/2, b/2) 8 if a % 2 == 0: 9 return gcd_Stein(a / 2, b) 10 if b % 2 == 0: 11 return gcd_Stein(a, b / 2) 12 13 return gcd_Stein((a + b) / 2, (a - b) / 2)