让你求[a,b]中因子最多的数,如果有一样多的就输出最小的那个。
ps:那个s和b是因为一开始我写的是a和b然后a被数组占掉了就改成start的首字母了不是你们想的那样。
思路的话,如果全部判断是不现实的,5000开方式70点几,所以不会有超过70的单独的因子。
所以在70一下求因子即可,如果遇到另一个因子大于70的再单独加上。
整体思路就是判断1到70是不是那5000个数的因子,如果是的,在判断成对的那个因子是不是大于70。
最后搜一遍取最小的就可以了。
/*02103971 2015-09-03 14:19:56 Accepted 1002 31 MS 1604 KB GNU C++ leso312 */
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int a[5010];
memset(a,0,sizeof(a));
for(int i=1;i<=70;i++){
for(int j=i;j<=5000;j++){
if(j%i==0){
a[j]++;
if(j/i>70){
a[j]++;
}
}
}
}
int s,b;
int T;
cin>>T;
while(T--){
cin>>s>>b;
int tmp=0,k=0;
for(int i=s;i<=b;i++){
if(a[i]>tmp){
tmp=a[i];
k=i;
}
}
cout<<k<<endl;
}
return 0;
}