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