hdu2521

来源:互联网 发布:avtt天堂网最新域名 编辑:程序博客网 时间:2024/06/10 13:57

1001.

题目来源:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1007&cid=31396&problem=Problem%20%20G

解法或类型:循环结构。

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
题意描述
      给一个闭区间,输出在这个区间内因子最多的那个数,如果最多的有多个则输出最小的那个数。
解题思路
      先把5000以内所有数的因子个数打个表,然后在比较出最大的因子,记住因子最大的那个数,因为比较是从前往后,因子数相同是不会把前面的顶掉。
 
时空分析: 

  

程序代码:

#include<stdio.h>

#include<string.h>

#defineN 5000

intc[N+10],i,j,t;

void  fun()

{

       memset(c,0,sizeof(c));

      

       for(i=1;i<=N;i++)

       {

              t=0;

              for(j=1;j<=N;j++)

              {

                     if(i%j==0)

                     t++;

              }

              c[i]=t;

             

       }

 

}

 

intmain()

{

       int a,b,m,i,y,f;

       fun();

       scanf("%d",&m);

       while(m--)

       {

              scanf("%d%d",&a,&b);

              y=c[a];

              f=a;

              for(i=a+1;i<=b;i++)

              {

                     if(y<c[i])

                     {

                            y=c[i];

                            f=i;

                     }

              }

              printf("%d\n",f);

      

       }            

       return 0;

}

错误分析:

 1、开始比较用的冒泡,先把因子和因子代表的数排序再比较输出,太麻烦还出错,最后发现这样写很简单。

 

原创粉丝点击