题目:
题意解析:
n 个程序员要在 m 个算法里选出最受欢迎的算法,每轮投票每个程序员都会在剩下的算法中选择一个。
在第一轮投票前,m 种算法都可以选择;每轮投票后,只保留有最多票数的算法;只剩下一种算法时,选拔结束。请判断无论怎样投票选拔都会结束吗?
题解:
(1)特殊情况的判断n==1||m==1的时候,结果确定是“YES”。再一个就是m>=n的时候,是没有只剩下一种算法的可能的,结果确定是“NO”。
(2)普通情况,(基本判断,但是这样判断会超时,后面会说优化)就是从2到m的范围内,判断n%i==0。为什么要这么判断?如果n%i=0的话,程序员可以一直只给i个人投票,到最后就会剩下i个人,就不是只有一个人!!
(3)时间优化处理:i<=n/i,为什么要这样判断?这里是判断一下n 能不能分解出一个小于 m 的质因数(除了1和它自身外,不能被其他自然数整除的数)。
代码:
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
long long int t;
int main() {
cin>>t;
while(t--){
long long int n,m;
cin>>n>>m;
int sign=0;
if(n==1||m==1){
cout<<"YES"<<endl;
continue;
}
if(m>=n){
cout<<"NO"<<endl;
continue;
}
for(int i=2;i<=m&&i<=n/i;i++){
if(n%i==0){
sign=1;
cout<<"NO"<<endl;
break;
}
}
if(sign==0){
cout<<"YES"<<endl;
}
}
return 0;
}