CF1041B题解

思路

先来个证明(这里默认 aca\le cbdb\le d):

ab=cd\frac{a}{b}=\frac{c}{d}

cmoda=0,dmodb=0c\bmod a=0,d\bmod b=0

所以题目就是要求求有多少组 (x,y)(x,y),满足

max(x,c)modmin(x,c)=0 max(y,d)modmin(y,d)=0\max(x,c)\bmod\min(x,c)=0\text{ }\max(y,d)\bmod\min(y,d)=0

xa,ybx\le a,y\le b

为了方便求 x,yx,y,我们需先将 c,dc,d 除以他们的最大公约数得到 c2,d2c_2,d_2,接着在枚举一个变量 kk,判断 c2×kc_2\times kd2×kd_2\times k 是否符合上述条件即可,如果符合,ans+1ans+1

代码

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,d,g;
//辗转相除求最大公约数
long long gcd(cll x,cll y){
	if(x%y==0){
		return y;
	}
	return gcd(y,x%y);
}
int main(){
	cin>>a>>b>>c>>d;
	g=gcd(c,d);
	c/=g,d/=g;
	cout<<min(a/c,b/d);
	return 0;
}
posted @ 2022-08-10 17:11  fengxiaoyi  阅读(21)  评论(0)    收藏  举报  来源