[ 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;
}
原文地址:https://www.cnblogs.com/DF-yimeng/p/9638655.html