【问题描述】
用递归方法求两个数m和n的最大公约数(greatest common divisor)。(m>0,n>0)
【大水题,大佬快绕】用辗转相除法求,递归实现。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 int m, n; 8 int gcd(int x, int y) 9 { 10 if(y == 0) return x; 11 return (gcd(y, x % y)); 12 } 13 int main() 14 { 15 scanf("%d%d", &m, &n); 16 printf("gcd=%d\n", gcd(m, n)); 17 return 0; 18 }
输入:28 8 输出:gcd = 4
那么再水一把:求一个最小公倍数(least common multiple)。
人人都知道,lcm(m, n) = m * n / gcd(m, n) 所以
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 int m, n; 8 int gcd(int x, int y) 9 { 10 if(y == 0) return x; 11 return (gcd(y, x % y)); 12 } 13 int main() 14 { 15 scanf("%d%d", &m, &n); 16 printf("lcm=%d\n", m * n / gcd(m, n)); //别再看了,就改了这一行 17 return 0; 18 }