Problem Description
反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数。现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大。
Input
第一行输入n,接下来n行测试数据
输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].
Output
输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.
Sample Input
3
2 3
1 10
47 359
Sample Output
2
6
240
void myread(char filename[]);
int process(int a,int b);
int eval(int);
int _tmain(int argc, _TCHAR* argv[])
{
char filename[]="test.txt";
myread(filename);
getchar();
return 0;
}
void myread(char filename[ ]){
FILE* file;
char line[1024];
char data[1024];
int numline;
int i;
char *ptr;
int a[20];
int idx;
int j;
int val;
if((file=fopen(filename,"r"))!=NULL){
printf("ok");
fgets(line,1024,file);
numline = atoi(line);
printf("%d\n",numline);
for(i=1;i<=numline;i++){
fgets(data,1024,file);
ptr = strtok(data," ");
idx=0;
while(ptr!=NULL){
// printf("%8s,idx: %4d\n",ptr,idx);
a[idx++]=atoi(ptr);
ptr = strtok(NULL," ");
}
printf("idx: %d\n",idx);
for (j=0;j<idx;j++){
printf("array %d\n",a[j]);
}
val = process(a[0],a[1]);
printf("result %d\n",val);
}
fclose(file);
}
// fclose(file);
}
int process(int a,int b){
//int* p=(int*)malloc(sizeof(int)*(b-a+1));
int k;
int c;
int num=0;
int val=a;
for(k=a;k<=b;k++){
c = eval(k);
if(c>num){
val = k;
num = c;
}
}
return val;
}
int eval(int n){
int i;
int c=0;
for(i=1;i<=n;i++){
if (n %i==0)
c++;
}
return c;
}