问题 A: 天梯选拔赛-A(CUMTB)

it2024-01-21  69

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

 

最新回复(0)