过剩数

过剩数


过剩数的定义是:一个正整数n,满足sigma(n ) - 2n > 0,sigma(n)就是n的所有约数的和,那么n就是过剩数。
而sigma(n ) - 2n就是过剩值。
现在给 x和y 两个正整数,要求在 区间[x,y] 里搜索过剩数,并且记录最大的过剩值。
比如 [10,12] ,只有12是过剩数,而且过剩值是4,那么这个区间里面最大的过剩值就是4.

【输入格式】
输入第一行为一个正整数t,表示有t组测试数据
每组测试数据一行,两个正整数x和y (1 < = x < = y < = 1024)
【输出格式】
每组数据如果有过剩数,输出最大的过剩值,否则输出-1
【样例输入】
3
1 1
10 12
1 1024
【样例输出】
-1
4
1208

这题贼简单,直接暴力水过....

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int yue(int n)
{
    int s=0;
    for(int i=1;i<=n;i++)if(n%i==0)s+=i;
    return s;
}
int main()
{
    int a,b,n;
    scanf("%d",&n);
    while(n--)
    {
        int max=-1;
        scanf("%d%d",&a,&b);
        for(int i=a;i<=b;i++)
        {
            int t=yue(i);
            if(t-2*i>0&&max<t-2*i)max=t-2*i;
        }
        printf("%d\n",max);
    }
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/candy067/p/11402020.html