1 /*--------------------------------欧几里德算法(辗转相除法)-----------------------*/ 2 /* 3 设a,b为正整数,则 gcd(a,b)=gcd(b,a%b); 4 递归式:gcd(a,b) = gcd(b,a%b); 5 递归边界:gcd(a,0) = a; 6 */ 7 8 int gcd(int a, int b) 9 { 10 if(b == 0) 11 return a; 12 else 13 return gcd(b, a%b); 14 } 15 16 //更简洁的写法 17 int gcd_concise(int a, int b) 18 { 19 return !b ? a : gcd(b, a%b); 20 } 21 22 /* 23 设a, b为正整数,则lcm(a,b)=(a*b)/gcd(a,b); 24 */ 25 26 int lcm(int a, int b) 27 { 28 return a/gcd(a,b)*b; //考虑到a*b可能溢出 29 }
原文:https://www.cnblogs.com/blue-lin/p/11140414.html