反素数
反素数就是满足对于任意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
# include <stdio.h>
int main()
{
int a,b,t,i,j,k,n,x = 0,y = 0,count;
scanf("%d",&n);
for(i = 1;i <= n;i++)
{
scanf("%d%d",&a,&b);
if(a > b)
{
t = a;
a = b;
b = t;
}
y = 0;//一开始我没有加这句话,代码就是错的
for(j = a;j <= b;j++)
{
for(k = 1;k <= j;k++)
{
if(j % k == 0)
x++;
}
if(x > y)
{
y = x;
count = j;
}
x = 0;
}
printf("%d\n",count);
}
return 0;
}
如果按照题目的输入顺序输入,输出的答案不会错,但是如果先输入“47 359”,那么y会得到一个很大的值,如果再输入比较小的数,例如“1 10”,if(x > y)就无法成立,count就保留着上一次的值,就会造成输出错误。
我是在这个点出错了,有什么其他问题可以评论留言我们继续讨论。