zoukankan      html  css  js  c++  java
  • [ 9.13 ]CF每日一题系列—— 340A GCD & LCM

    Description:

      【 着实比较羞愧,都想着去暴力,把算法(方法)也忘了】  

      A只涂x,2x,3x……,B只涂y,2y,3y……问你A和B共同涂的墙的个数

    Solution:
      就是求x和y的lcm,这里倒是想到了用x * y = gcd * lcm,但是算区间个数的时候我竟然去暴力了!!!!

      区间1 - b所有的出现的个数是 b / lcm

      区间1 - a所有的出现的个数是a / lcm

      两个一相减就是(a,b]的个数了

      很明显我们把a舍去了,最后可以加个判断也可以是b / lcm - (a-1) / lcm

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    int gcd(int a,int b)
    {
        if(!b)return a;
        return gcd(b,a%b);
    }
    int main()
    {
        int x,y;
        ll a,b;
        while(~scanf("%d%d%lld%lld",&x,&y,&a,&b))
        {
            int lcm = x * y / gcd(x,y);
            int k = 1;
            ll tem = k * lcm;
            ll cnt = b / tem - (a-1) / tem;
            printf("%lld
    ",cnt);
        }
        return 0;
    }
    
  • 相关阅读:
    eclipse 快捷键
    JSTL标签 参考手册
    Oracle错误代码大全
    十大编程算法
    win激活查询及修改
    LINUX安全设置
    Mac OS Ruby安装 使用RVM
    windows 说“我爱你”
    ubuntu安装
    linux下文件压缩与解压操作
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/9638655.html
Copyright © 2011-2022 走看看