题目描述:
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余 5个数相加,1+2+4+7+14=28。
输入描述:
给定函数count(int n),用于计算n以内(含n)完全数的个数。计算范围0 < n <= 500000
输出描述:
返回n以内完全数的个数。 异常情况返回-1
代码示例:
#include<iostream>
#include<algorithm>
using namespace std;
int count(int n) {
//数据判断
if((n < 0) || ( n > 500000)) {
return -1;
}
int arr = 0;
for(int i = 2;i <= n;i++) { //输入数的范围
int a = 0;
//开始遍历每一个数
int cur = sqrt(i);
//sqrt是根号i的含义;
//最多遍历到它根号的结果,
//例如4到2 就好了,9到3就好了;28到5就好了
//再多就重复了
for(int j = 2;j <= cur;j++) {
if(j % i == 0) {
if(j / i == i) { //4 = 2 * 2这种 //找到一样的
a += j;
}
else {
a += j + (i / j);
}
}
}
if(a + 1 == i) {
arr++;
}
return arr;
}
}