Date:2019-07-05 19:22:40
算法实现
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 }