一个“完数”个数的C语言程序
题目:一个数如果恰好等于它的所有因子之和,这个数就称为"完数"。例如124+7+1428.编程
       出1000以内的所有完数。
#include "Stdio.h"
#include "Conio.h"
int main(void)
{
/* 此处添加你自己的代码 */
    int i,n,sum ;
    printf("\nFind a num like 28 == 1 + 2 + 4 + 7 + 14 in  0~1000 ");
    printf("\nThe all num is :");
    for( n = 1; n < 1000; n++)
    {
        sum = 0;
        for(i = 1;i < n; i++)
            if(n%i == 0)
                sum += i;
        if(sum == n)
              printf("%4d",n);
        }
  getch();
  return 0;
}
--------- 完数(Prefect  number的形式------------------------------
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(p-1)*(2^p-1) 
  其中2^p-1是素数 
   
  完全数(Perfect  number)是一些特殊的自然数:它所有的真因子(即除了本身以外的约数 
  )的和,恰好等于它本身。 
   
  例如:第一个完全数是6,它有约数1236,除去它本身6外,其余3个数相加,12
  6。第二个完全数是28,它有约数12471428,除去它本身28外,其余5个数相加 
  124  +  7  +  1428。后面的数是4968128 
   
  古希腊数学家欧几里德是通过  2^(n-1)*(2^n-1)  的表达式发现头四个完全数的。 
   
    n  =  2^1*(2^2-1)  =  6 
    n  =  2^2*(2^3-1)  =  28 
    n  =  2^4*(2^5-1)  =  496 
    n  =  2^6*(2^7-1)  =  8128 
  欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(n-1)*(2^n  -1) 
   
   
  尽管没有发现奇完数,但是当代数学家奥斯丁·欧尔(Oystein  Ore)证明,若有奇完全 
  数,则其形状必然是12p  +  136p  +  9的形式,其中p是素数。在1018以下的自然数中奇完 
  数是不存在的。 
   
  3 
  例子 
  6284968128335503368589869056(10)137438691328(12) 
  2305843008139952128(19)…… 
   
   
  偶完数都是以68结尾。如果以8结尾,那么就肯定是以28结尾。 
  6以外的偶完数,把它的各位数字相加,直到变成一位数,那么这个一位数一定是1(亦即 
  :除6以外的完数,被9除都余1。): 
  282+8=101+0=1 
  4964+9+6=191+9=101+0=1 
   
  所有的偶完数都可以表达为2的一些连续正整数次幂之和,从2p  -  122p  -  2:  <:以下an次方表示形式为a(n)>
  6=2(1 ) +  2(2 )
  28=2(2  ) +  2(3)  +  2(4) 
  8128=2(6)  +  2(7)  +  ...  +  2(12) 
  33550336=2(12)  +  2(13 )  +  ...  +  2(24) 
   
  每一个偶完数都可以写成连续自然数之和: 
  6=1+2+3 
  28=1+2+3+4+5+6+7 
  496=1+2+3+…+30+31 
  8128 = 1+2+3+...+126+127
  6以外的偶完数,还可以表示成连续奇数的立方和(被加的项共有) 
  28=1(3)  +  3(3) 
  496=1(3)  +  3(3)  +  5(3)  +  7(3) 
  8128=1(3 )  +  3(3)  +  5(3)  +  ...  +  15(3) 
  33550336=1(3)  +  3(3)  +  5(3)  +  ...  +  125(3)  +  127(3) 
   
  每一个完数的所有约数(包括本身)的倒数之和,都等于2 
  1/1  +  1/2  +  1/3  +  1/6  =2 
  1/1  +  1/2  +  1/4  +  1/7  +  1/14  +  1/28  =2  一个完整的c语言程序
  它们的二进制表达式也很有趣: 
  (6)10  =  (110)2 
  (28)10  =  (11100)2  
812810 = (1111111000000)2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。