题目大意:
给定4个数,abcd,要求找到一组<x, y>使得x * y能够整除 a * b。其中a<x<=c,b<y<=d,如果可以找到符合条件的x y ,输出,否则,输出-1 -1
输入:
5
1 1 2 2
3 4 5 7
8 9 15 18
12 21 14 24
36 60 48 66
输出:
2 2
4 6
12 12
-1 -1
-1 -1
题目解析:e=a*b/__gcd(a*b,x),只要y为e的倍数,x*y能够整除a*b; 构造一个大于b的e的倍数, 故而,y=(b+e)/e*e;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
const int N=3e5+10;
int n,m;
int a[N];
inline void solve()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
for(int x=a+1;x<=c;x++)
{
int e=a*b/__gcd(a*b,x);
int y=(b+e)/e*e;
if(y>b&&y<=d)
{
printf("%lld %lld\n",x,y);
return ;
}
}
puts("-1 -1");
}
signed main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}