反素数
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;
}