求最大公約數
阿新 • • 發佈:2018-01-22
clas amp 公倍數 最小 pri iso 公約數 ring int
【問題描述】
用遞歸方法求兩個數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 }
求最大公約數