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 的最大公约数。
代码如下:
对于两个最简的分数 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; }
相关文章推荐
- HDU 1713 相遇周期 LCD LCM 2.1.3
- hdu 1713 相遇周期 (GCD & LCM)
- HDU 1713相遇周期(两个分数的lcm)
- hdu 1713 相遇周期 比较绕的最大公约,最小公倍问题
- HDU 1713 相遇周期(求两个分数的最小公倍数)
- HDU 1713 -相遇周期
- 相遇周期 HDU - 1713
- HDU 1713 相遇周期
- HDU 1713 相遇周期
- hdu 1713 相遇周期
- HDU-1713 相遇周期
- HDU-1713 相遇周期
- HDU 1713 相遇周期(水)
- HDU 1713 相遇周期 — 欧几里得算法与最大公约数,最小公倍数
- HDU 1713 相遇周期
- hdu1713相遇周期
- HDU 1713 相遇周期 (最小公倍数)
- 关于HDU 1713 相遇周期
- HDU - 1713 相遇周期
- hdu 1713 相遇周期