题:完全数计算

题目描述:

完全数(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;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值