您的位置:首页 > 其它

HDU-1713 相遇周期 LCD LCM

2011-08-28 09:30 309 查看
  简单点说题目就是要求连个分数的最小公倍数,这个题目上次在参加比赛时遇到过,不过那时候是用很暴力的方法过的。本来上次我们已经推出来是求两个最简形式分数的分母的最小公倍数以及分母的最大公约数,不过就是A不掉,不过还好这次过掉了,方法论证是没错的。

  对于两个最简的分数 a / b, c / d 把他们两个的最小公倍数 x / y 也设为一个分数形式,那么这个 x 一定能够整除 a , c, y 一定能够被 b , d整除。那么要求得最小公倍数,那么肯定是分子尽量小,即 a , c 的最小公倍数, 分母尽量大, 即 b , d 的最大公约数。

  代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int gcd( int x, int y )
{
if( y == 0 )
return x;
else
return gcd( y, x % y );
}

int lcm( int x, int y )
{
return x / gcd( x, y ) * y;
}

int main()
{
int T;
scanf( "%d", &T );
while( T-- )
{
int a, b, c, d, rx, ry;
scanf( "%d/%d", &a, &b );
scanf( "%d/%d", &c, &d );
int t = gcd( a, b );
a /= t, b /= t;
t = gcd( c, d );
c /= t, d /= t;
if( gcd( b, d ) == 1 )
{
printf( "%d\n", lcm( a, c ) );
}
else
{
printf( "%d/%d\n", lcm( a, c ), gcd( b, d ) );
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: