反素数




Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)


Total Submission(s): 4566    Accepted Submission(s): 2683



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



Hint


2的因子为:1 2

10的因子为:1 2 5 10

 

Source


HDU 2008-10 Programming Contest


题目大意:给你一个区间[a,b],找出这个区间内,拥有因子个数最多的那个数。

思路:数据规模为5000,先求出1~5000每个数的因子个数,用数组A[]存起来,然后

找出区间[a,b]内因子数最多的那个数(如果有多个解,输出最小的数)。



#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

int A[5050];

int main()
{
A[1] = 1;
for(int i = 2; i <= 5000; ++i)
{
int sum = 0;
for(int j = 1; j <= i/2; ++j)
{
if(i % j == 0)
{
sum++;
if(j != (i/j))
sum++;
}
}
A[i] = sum;
}

int N;
cin >> N;
while(N--)
{
int a,b;
cin >> a >> b;
int Max = 0,pos = 0;
for(int i = a; i <= b; ++i)
{
if(Max < A[i])
{
Max = A[i];
pos = i;
}
}
cout << pos << endl;
}

return 0;
}