分数的最小公倍数
输入两个分数,输出他们的最小公倍数
输入案例:
3/4 5/6
输出案例:
15/2
解答:
有
a
/
b
a/b
a/b 和
c
/
d
c/d
c/d 两个分数,假设他们的最小公倍分数为
x
/
y
x/y
x/y
我们事先利用gcd(求最大公因数)把两个分数变成最简分数。
则有
x
y
/
a
b
=
n
,
x
y
/
c
d
=
m
(
n
,
m
都
是
整
数
)
\frac{x}{y}/\frac{a}{b}=n,\frac{x}{y}/\frac{c}{d}=m(n,m都是整数)
yx/ba=n,yx/dc=m(n,m都是整数)
因为
x
y
/
a
b
\frac{x}{y}/\frac{a}{b}
yx/ba是整数,所以x要能被a整除,b要能被y整除。
同理
x
y
/
c
d
\frac{x}{y}/\frac{c}{d}
yx/dc是整数,所以x要能被c整除,d要能被y整除。
所以x是a和c的最小公倍数,y是b和d的最大公因数。
PS:求最大公因数的方法:辗转相除法
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
PS:求a和b的最小公倍数的方法:
x = a / gcd(a,c) * c;
#include<iostream>
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int main () {
int a, b, c ,d;
scanf("%d/%d %d/%d", &a, &b, &c, &d);
int x = gcd(a,b);
int y = gcd(c,d);
a /= x;
b /= x;
c /= y;
d /= y;
x = a / gcd(a,c) * c;
y = gcd(b,d);
if (y == 1) {
cout << x << endl;
} else {
cout << x << "/" << y << endl;
}
return 0;
}