http://10.18.21.138/problem.php?cid=1043&pid=0
设LCM(x,y)为x和y的最小公倍数,然然很喜欢数学,他想知道,对于两个数L和R,能否在[L,R]区间内找到两个数x,y,使得LCM(x,y)也在这个区间内。
很显然,直接暴力,两层for,会超时,想着用折半查找,也会超时。
那么,就要从观察数据的规律入手了,若2*L<=R,那么很显然L,2*L是所要求得数,2*L为L和2*L的最小公倍数。若2*L>R,那么很显然,不会存在两个数x,y,使得LCM(x,y)也在这个区间内。
所以看到题目,要多想,观察数据规律,而不是一味的暴力,优化。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int p;
cin>>p;
while(p--)
{
int m,n;
int x,y;
cin>>m>>n;
if(m*2<=n)
{
x=m;
y=2*m;
}
else
{
x=-1;
y=-1;
}
cout<<x<<" "<<y<<endl;
}
}