zoukankan      html  css  js  c++  java
  • 算法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);
    27         printf("the number %d is made up as follow!
    ",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 );
    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! 
    ");
    51     scanf("%d",&n);
    52     perfectnum(n);
    53     */
    54     //也可以输出在某一范围内的所有完全数
    55     printf("please input the scope you want to find! 
    ");
    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 }
     
  • 相关阅读:
    图像增强:直方图均衡和小波变换【matlab】
    边缘检测算子和小波变换提取图像边缘【matlab】
    维纳滤波和编码曝光PSF去除运动模糊【matlab】
    编码曝光
    鱼眼镜头的distortion校正【matlab】
    Linux如何查看JDK的安装路径
    Linux启动vi编辑器时提示E325: ATTENTION解决方案
    Linux下useradd命令创建的用户不能登录的问题
    Linux系统下(x64)安装jdk 1.6(jdk-6u45-linux-x64.bin)
    根据wsdl文件,Web工程自动生成webservice客户端调用
  • 原文地址:https://www.cnblogs.com/tao-alex/p/5933474.html
Copyright © 2011-2022 走看看