HDU2521 反素数

反素数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7435    Accepted Submission(s): 4478


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
 
  
32 31 1047 359
 
Sample Output
 
  
26240
Hint
2的因子为:1 210的因子为:1 2 5 10

反素数,其实就是因子最多的数.

思路:数组储存因子数,数组下标储存因子数最多的数

#include<iostream>
using namespace std;


int main()
{
int n,a,b,y,sum,temp,i;
int array[5005];
cin>>n;
while(n--)
{
cin>>a>>b;
temp=a;
array[temp]=0;
for(i=a;i<=b;i++)
{
sum=0;
for(y=1;y<=i/2;y++)//y因子
{
if(i%y==0)
sum++;

array[i]=sum;
if(array[i]>array[temp])
{
array[temp]=array[i];
temp=i;
}
}
cout<<temp<<endl;
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/tingtingyuan/article/details/80216643