通过题目描述,我们可以直接用暴力模拟该过程,如果遍历过程中存在该数直接输出Yes,如果遍历完成还没有找到直接输出No即可
上代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(void)
{
int q; cin >> q;
while(q--){
int flag = 0;
int n, m; cin >> n >> m;
for(int i = 1; i <= m; i++){
for(int j = i + 1; j <= m; j++){
if(n % i == n % j){
flag = 1;
cout << "Yes" << endl;
break;
}
}
if(flag) break;
}
if(!flag) cout << "No" << endl;
}
return 0;
}
接下来是优化方案
我们知道如果对某个数进行取余,例如n % i,取模得到的数一定小于当前数字,也就是n % i <= i - 1, 通过这个性质,我们可以模拟比较大的那个数y,如果n % y == y - 1,我们可以知道不会存在x,使得n % x == y - 1.因为x < y, 而进行取模最大也只是y - 2,因此如果n % y != y - 1,那么一定存在x,使得n % y == n % x,直接模拟该过程即可
上代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(void)
{
int q; cin >> q;
while(q--){
int flag = 0;
int n, m; cin >> n >> m;
for(int i = 1; i <= m; i++){
if(n % i != i - 1){
flag = 1;
cout << "Yes" << endl;
break;
}
}
if(!flag) cout << "No" << endl;
}
return 0;
}