HDU:1722解题报告(让我郁闷了好久…

http://acm.hdu.edu.cn/forum/read.php?tid=10374

利用m,n的最小公倍数做的
比如m=2,n=5
gcd=10,就是说分十份时就可以补上它们之间的差额
1/2和1/5 差了2/10 这样的情况
分成2个1/5和6个1/10,观察一下有时可以合并的所以就得到2个1/5+2( 由四个1/10得到)+2个1/10
但是会有这样的时候m,n 有公约数(不是整除的时候的)
如:6和10就是30了
利用1/30补差额,1/6和1/10差了2/30
六个1/10和12个1/30 然后合并6+4个1/15+4个1/10
观察了半天,推出
min=f(a,b); //求最小公倍数a<b

详细解析:http://www.shuxueweb.com/shuxuebolan/qiuti/shuxuebolan_9112.html
  sum=a+(min-a)/(min/b);

#include<stdio.h>
int gcd(int a,int b)
{
    while(a>b?(a=a%b):(b=b%a));
    return a+b;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)>0)
        printf("%d\n",n+m-gcd(m,n));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值