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)