算法15---数论1---完全数

算法15---数论1---完全数

完全数是一些特殊的自然整数。完全数等于其所有因子之和。所谓因子是所有的可以整除这个数的数,而不包括这个数本身。
 
一些完全数的概念
(1)亏数:当一个自然数的所有因子之和小于该自然数,那么该自然数便是亏数;
(2)盈数:当一个自然数的所有因子之和大于该自然数,那么该自然数便是盈数;
(3)完全数:当一个自然数的所有因子之和等于该自然数,那么该自然数便是完全数;
 
相关的结论
1 每一个完全数都可以表示成连续自然数之和
2 每个完全数都是调和数;
     若一个正整数n的所有因子的调和平均是整数,n便称为调和数(Harmonic number)。它又称欧尔数(Ore number)。
3 每一个完全数都可以表示为2的一些连续正整数次幂之和。
     如:6=2+2²
4 已知的完全数都是以6或者8结尾。
5 除6以外的完全数都可以表示成连续奇立方之和。
     如:28=1³+3³;
 
完全数的实现如下
 
 1 /*
 2     题目:完全数
 3     author taoliu——alex  2016.10
 4 
 5 */
 6 
 7 
 8 #include <stdio.h>
 9 
10 
11 void perfectnum(int n)
12 {
13 
14     int perfect[100]={0};
15     int sum=0;
16     for (int i = 1; i < n; i++)
17     {
18         if (n%i==0)
19         {
20             perfect[i]=i;
21             sum=sum+i;
22         }
23     }
24     if (sum==n)
25     {
26         printf("the number %d is perfect number!\n",n);
27         printf("the number %d is made up as follow!\n",n);
28         for (int i = 0; i < 100; i++)
29         {
30             if (perfect[i]!=0)
31             {
32                 printf("%d ", perfect[i]);
33             }
34         }
35 
36     }
37     //else
38     //    printf("%d is not perfect number!\n",n );
39 
40 
41 }
42 
43 int main()
44 {
45 
46 
47     //可以输入你想要判断的数字
48     /*
49     int n;
50     printf("please input the number you want to judge! \n");
51     scanf("%d",&n);
52     perfectnum(n);
53     */
54     //也可以输出在某一范围内的所有完全数
55     printf("please input the scope you want to find! \n");
56     int scope;
57     scanf("%d",&scope);
58 
59     for (int i = 1; i < scope; ++i)
60     {
61         perfectnum(i);
62     }
63     return 0;
64 
65 }

 

 
posted @ 2016-10-06 10:02  taoliu_alex  阅读(1142)  评论(0编辑  收藏  举报