shunfurh
编程介的小学生
采纳率92.7%
2017-11-12 02:55 阅读 770

反素数

10

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • will200811 will200811 2018-08-27 14:17

    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;
    }

    点赞 评论 复制链接分享

相关推荐