[ 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\n",cnt);
}
return 0;
}

浙公网安备 33010602011771号