计算完全数

来源:互联网 发布:小众发单软件 编辑:程序博客网 时间:2024/06/05 14:45
        完 全 数 (Perfectnumber)是一些特殊的自然整数。完全数等于其所有因子的和。这里所谓的因 
子就是所有可以整除这个数的数,而不包括该数本身。本节将简单介绍完全数的基本规则和性质,

 以及判断完全数的算法。

       与完全数相关的两个概念便是亏数和盈数。一般来说,判断一个自然数是亏数、盈数以及完全 数,可以通过其所有真因子的和来判断。 • 当一个自然数的所有真因子的和小于该自然数,那么该自然数便是亏数。 • 当一个自然数的所有真因子的和大于该自然数,那么该自然数便是盈数。 • 当一个自然数的所有真因子的和等于该自然数,那么该自然数便是完全数。 

        例如,4 的所有真因子包括1 和 2 , 而 4>1+2, 所以4 是一个亏数;6 的所有真因子包括1、2 、 3 , 而 6=1+2+3, 因此6 是一个完全数;12 的所有真因子包括1、2 、3、4 、6 , 而 12<1+2+3+4+6, 所 以 12 是一个盈数。下面举几个典型的完全数的例子:
6=1+2+3 28=1+2+4+7+14
496= 1 +2+4+8+16+31 +62+124+248
8128= 1 +2+4+8+16+32+64+127+254+508+1016+2032+4064 

       对完全数的研究,可以追溯到公元前6 世纪。当时,毕达哥拉斯已经发现6 和 28 是完全数。到 目前为止,总共找到47 个完全数。寻找完全数比较困难,完全数的值越来越大,有时需要借助高速 
的计算机来寻找。在所有的自然数中总共有多少个完全数,这仍然是个谜,许多数学家仍在为之奋 斗。另外最奇特的是,目前所有发现的完全数都是偶数,到底是否存在奇数的完全数也是一个谜。
 人们不断研究完全数是因为其有许多奇特的性质。 

1 . 每一个完全数都可以表示成连续自然数的和
每一个完全数都可以表示成连续自然数的和,这些自然数并不一定是完全数的因数。例如:
 6=1+2+3 28=1+2+3+4+5+6+7 
496= 1+2+3+4+. • -+29+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 的一些连续正整数次幂之和 每一个完全数都可以表示为2 的一些连续正整数次幂之和,例如: 6=2^l+2^2
28=2^2+2^3+2^4
8128=2^6+2^7+2^8+2^9+2^10+2^11 +2^ 12
4 . 已知的完全数都是以6 或者8 结尾
已知的完全数都是以6 或者8 结尾,例如6 、28、496、8128、33550336等。从这里也可以看出,
 已知的每一个完全数都是偶数,但还没有严格证明没有奇数的完全数。 5 . 除 6 之外的完全数都可以表示成连续奇立方之和
除 6 之外的完全数都可以表示成连续奇立方之和,例如:
28=l^3+3^3
496=l^3+3^3+5^3+7^3
8128=l^3+3^3+5^3+".+15^3


下面是C++代码实现算法:

#include<iostream>using namespace std;void caculate(int range){int nowNumber,sum;for (int i = 1; i <= range; i++) {nowNumber = i;sum = i;for (int j = 1; j < nowNumber; j++) {if (nowNumber%j == 0) {sum -= j;}}if (sum == 0) {cout << nowNumber <<"是完全数" << endl;}}}int main() {caculate(10000);system("pause");}

运行结果:


0 0
原创粉丝点击