对于两个最简的分数 a / b, c / d 把他们两个的最小公倍数 x / y 也设为一个分数形式,那么这个 x 一定能够整除 a , c, y 一定能够被 b , d整除。那么要求得最小公倍数,那么肯定是分子尽量小,即 a , c 的最小公倍数, 分母尽量大, 即 b , d 的最大公约数。
求一组分数的最小公倍数的方法
(1) 先将各个分数化为a/b的形式(假分数 或真分数形式)
(2) 用各个分数的分母的最大公因数作所求最小公倍数的分母
(3) 用各个分数的分子的最小公倍数数作所求最小公倍数的分
(1) 先将各个分数化为a/b的形式(假分数 或真分数形式)
(2) 用各个分数的分母的最大公因数作所求最小公倍数的分母
(3) 用各个分数的分子的最小公倍数数作所求最小公倍数的分
#include <stdio.h>
__int64 gcd(__int64 x, __int64 y)
{
if(y == 0)
return x;
else gcd(y, x%y);
}
__int64 lcm(__int64 x,__int64 y)
{
return (x*y)/gcd(x,y);
}
int main()
{
__int64 a,b,c,d,e,f;
__int64 temp;
int cas;
freopen("abc.txt","r",stdin);
scanf("%d",&cas);
while(cas--) {
scanf("%I64d/%I64d",&a,&b);
scanf("%I64d/%I64d",&c,&d);
temp = gcd(a,b);
a /= temp; b/= temp;
temp = gcd(c,d);
c /= temp; d/=temp;
e = lcm(a,c);
f = gcd(b,d);
temp = gcd(e,f);
e /= temp;
f /=temp;
if( f==1 ) printf("%I64d\n",e);
else printf("%I64d/%I64d\n",e,f);
}
return 1;
}