题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2521没有用到反素数。。。。。。。。。。。。。。。。。。。。先打表,再查询。
#include <stdio.h>
const int MAX = 5000+10;
int num[MAX];
int fun(int x)
{
int y = 2, ans=1, t = 0;
while (x!=1)
{
if (x%y==0)
{
t++;
x = x/y;
}
else
{
ans = ans *(t+1);
y++;
t = 0;
}
}
ans = ans *(t+1);
return ans;
}
void init()
{
int i;
for (i=1; i<=5000;i++)
{
num[i] = fun(i);
//printf("%d\n", num[i]);
//getchar();
}
}
int find(int a, int b)
{
int i, maxsum = num[a], bestnum = a;
for (i=a; i<=b; i++)
{
if (num[i]>maxsum)
{
maxsum = num[i];
bestnum = i;
}
}
return bestnum;
}
int main()
{
init();
int a, b ,t;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &a, &b);
printf("%d\n", find(a, b));
}
}