最大公约数与最小公倍数

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 }

 

posted @ 2019-07-05 19:23  林東雨  阅读(185)  评论(0编辑  收藏  举报