[ 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; }