首页 > 代码库 > 算法15---数论1---完全数

算法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     //else38     //    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 }

 

 

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