过剩数

过剩数


过剩数的定义是:一个正整数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
",max);
	}
	
	return 0;
}
原文地址:https://www.cnblogs.com/candy067/p/11402020.html