思路
先来个证明(这里默认 a≤c 且 b≤d):
若
ba=dc
则
cmoda=0,dmodb=0
所以题目就是要求求有多少组 (x,y),满足
max(x,c)modmin(x,c)=0 max(y,d)modmin(y,d)=0
且
x≤a,y≤b
为了方便求 x,y,我们需先将 c,d 除以他们的最大公约数得到 c2,d2,接着在枚举一个变量 k,判断 c2×k 和 d2×k 是否符合上述条件即可,如果符合,ans+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;
}