博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1713 相遇周期 比较绕的最大公约,最小公倍问题
阅读量:5936 次
发布时间:2019-06-19

本文共 1087 字,大约阅读时间需要 3 分钟。

输入 a/b c/d

转换后变成:
(a*d)/(b*d) 和 (c*b)/(b*d)
按照题意,就是在转相同的圈子(b*d圈)时,各自需要时间a*d和c*b.
所以,这里把a*b与c*b的最小公倍数求出来就可以了。
这样。求出的最小公倍数lcm再除以(b*d)就是所求的周期。
()
但是,这里要求若无法整出,则写出分数形式,这时,
就可以求lcm与(b*d)的最大公约数gcd,
求出gcd后与(b*d)比较,若相等,则证明可以整除~~~~

 1 
#include 
<
cstdio
>
 2 
#include 
<
iostream
>
 3 
#include 
<
algorithm
>
 4 
using
 
namespace
 std;
 5 
 
 6 
__int64 gcd(__int64 a, __int64 b)
 7 
{
 8 
    
if
(a
<
b)
 9 
    {
10 
        a 
^=
 b;
11 
        b 
^=
 a;
12 
        a 
^=
 b;
13 
    }
14 
    
if
(b 
==
 
0
)
15 
        
return
 a;
16 
    
return
 gcd(b, a
%
b);
17 
}
18 
 
19 
__int64 lcm(__int64 a, __int64 b)
20 
{
21 
    
return
 a
/
gcd(a, b)
*
b;
22 
}
23 
 
24 
int
 main()
25 
{
26 
    
//
freopen("input.txt", "r", stdin);
27 
    
int
 nCases;
28 
    scanf(
"
%d
"
&
nCases);
29 
    
for
(
int
 i
=
0
; i
<
nCases; 
++
i)
30 
    {
31 
        
char
 tmp;
32 
        __int64 a, b, c, d;
33 
        scanf(
"
%I64d/%I64d %I64d/%I64d
"
&
a, 
&
b, 
&
c, 
&
d);
34 
        __int64 m
=
a
*
d, n
=
b
*
c, p
=
b
*
d;
35 
        __int64 k
=
lcm(m, n);
36 
        
int
 h 
=
 gcd(k, p);
37 
        
if
(p
==
h)
38 
            printf(
"
%I64d\n
"
, k
/
h);
39 
        
else
40 
            printf(
"
%I64d/%I64d\n
"
, k
/
h, p
/
h);
41 
    }
42 
    
return
 
0
;
43 
}

转载于:https://www.cnblogs.com/anderson0/archive/2011/05/08/2040218.html

你可能感兴趣的文章
Mybatis的配置文件和映射文件详解
查看>>
react 如何 阻止冒泡
查看>>
vue2.X 与 vue1.X 的区别
查看>>
nohup & 及端口查看
查看>>
ffmpeg 的log 获取办法
查看>>
rtmp流媒体协议播放遇到的坑
查看>>
Go 之旅四: 方法与接口篇
查看>>
Flask - cookies
查看>>
获取系统主题颜色
查看>>
P3041 [USACO12JAN]视频游戏的连击Video Game Combos
查看>>
CF1012C Hills
查看>>
男士必须收藏:男士健身方案
查看>>
03python面向对象编程2
查看>>
表格式布局让每个列高度等于该行最大高度
查看>>
Redis常用命令【字符串】
查看>>
ABP官方文档翻译 10.1 ABP Nuget包
查看>>
CentOS7 防火墙
查看>>
DataTable
查看>>
POJ 2226 Muddy Fields 二分图(难点在于建图)
查看>>
STM32软件仿真的一个注意点
查看>>