完全数

完全数等于其所有真因子的和,完全数又称完美数或完备数。

三个概念:亏数,完全数,盈数

当一个自然数的所有真因子的和小于该自然数,那么该自然数便是亏数

当一个自然数的所有真因子的和大于该自然数,那么该自然数便是盈数

当一个自然数的所有真因子的和等于该自然数,那么该自然数便是完全数

比如

6=1+2+3 是完全数

28=1+2+4+7+14是完全数

496=1+2+4+8+16+31+62+124+248 是完全数


而1+2<4 是亏数。

1+2+3+4+6>12是盈数

等等


性质:

1.每一个完美数都可以表示成连续自然数的和。

6=1+2+3

28=1+2+3+4+5+6+7

496=1+2+3+...+30+31

2.每一个完全数都是调和数

如果一个正整数的所有因子的调和平均是整数,那么这个正整数便是调和数。而每一个完全数都是调和数。

比如6:1/1+1/2+1/3+1/6=2

28:1/1+1/2+1/4+1/7+1/14+1/28=2

3.每一个完全数都可以表示为2的一些连续正整数次幂之和

比如:

6=2^1+2^2

28=2^2+2^3+2^4

4.已知的完全数都是以6或8结尾

6,28,496,8128,33550336,

5.除6外的完全数都可以表示成连续奇次方之和

比如:28=1^3+3^3

296=1^3+3^3+5^3+7^3

具体实现如下:

#include <iostream>  
#include <cmath>  
using namespace std;  
void perfect(long );
int main()  
{  
	long length;
	length = 10000;
	cout<<length<<"范围内的完全数:"<<endl;
	perfect(length);
	system("pause");
    return 0;  
}  
void perfect(long n)
{
	long p[100];
	long i,j,k,sum,num,count;
	for (i = 1; i < n; i++)
	{
		num = i;
		count = 0;
		sum = num;
		for (j = 1; j < num; j++)
		{
			if (num%j == 0)
			{
				p[count++] = j;
				sum = sum - j;
			}
		}
		if (sum == 0)
		{
			cout<<num<<"是一个完全数,因子为:";
			cout<<num<<" = "<<p[0];
			for (k = 1;k < count; k++)
			{
				cout<<" + "<<p[k];
			}
			cout<<endl;
		}

	}

}

结果如下:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值