最小公倍数
题目描述
已知正整数x,m。
在[1,m]中是否存在正整数y,y>x,且使得lcm(x,y)<=m。
lcm(x,y)指的是x,y的最小公倍数
输入
第一行包括一个正整数t,0<t<106,每组测试包含t组数据。
接下来t行,每行有两个正整数x和m,0<x<1018,0<m<1018。
输出
存在y∈[1,m]使得y>x,且lcm(x,y)<=m则输出“YES”,反之输出“NO”。
每个输出单独占一行。
样例输入
4
2 4
3 10000000000
20 30
7 15
样例输出
YES
YES
NO
YES
题解:
LCM(x,y) 必定同时是 x,y 的倍数,并且 x 此时,y=LCM(x,y)=2*x。
所以,只要满足m>=2*x则有解。
所以只要判断m是否大于2*x即可,复杂度O(1)。
注意数据范围,x和m的数据类型使用int_64。
源代码:
#include <bits/stdc++.h>
using namespace std;
long long t,x,m;
int main() {
cin>>t;
while(t--)
{
cin>>x>>m;
if(m>=x*2) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
AC