1. 程式人生 > >求最大公約數

求最大公約數

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 }

求最大公約數