完数 (判断一个完数、求范围内完数)

目录:

  1. 什么是完数
  2. 判断一个完数
  3. 求范围内完数
一、什么是完数

定义:完全数完数)Perfect number

如果一个数恰好等于它的因子之和,则称该数为“完全数”。

第一个完全数是
6=1+2+3
第二个完全数是
28=1+2+4+7+14
第三个完全数是
496=1+2+4+8+16+31+62+124+248

后面还有:8128、33550336………

二、判断一个完数

程序…………………………

#include<stdio.h> 
int main()
{
    int n,i,sum=0;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    for(i=1;i<n;i++)
    {
        if(n%i==0)
            sum=sum+i;      //因子累加
    }
    if(sum==n)
        printf("%d是一个完数\n",n);
    else
        printf("%d不是一个完数\n",n);
    return 0;
}

运行结果……………………
在这里插入图片描述
在这里插入图片描述

三、求范围内完数

问题:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而 6=1+2+3,因此6是完数。输出1000之内所有完数……

程序1…………………………

#include<stdio.h>
int main()
{
    int n,i,sum;
    printf("输出1000以内所有的“完数”:\n\n");
    for(n=2;n<1000;n++)         //从2开始判断 
    {
        sum=0;
        for(i=1;i<n;i++)
        {
            if(n%i==0)
            sum+=i;         //因子累加
        }
        if(sum==n)
            printf("%d 是一个完数\n",n);
    }
    return 0;
}

运行结果…………………………
在这里插入图片描述
程序2…………………………

//一个数如果恰好等于它的因子之和,这个数就称为“完数”。
//例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。
 
#include<stdio.h>
int main()
{
    int n,s,i;
    printf("输出1000以内所有的“完数”:\n\n");
    for(n=2;n<1000;n++)
    {
        s=0;
        for(i=1;i<n;i++)
            if((n%i)==0) s=s+i;
        if(s==n)
        {
             printf("%d its factors are ",n);  //它的因子 
             for(i=1;i<n;i++)
                 if(n%i==0)
                     printf("%d ",i);
             printf("\n");  
        }
    }
    return 0;
}

运行结果…………………………
在这里插入图片描述
用中文输出:
在这里插入图片描述
常见一些概念:

质数 :一个数的因数只有 1 和 它本身(又称素数
合数 :一个数除 1 和 它本身 外,还有其它的因数。
真因子:包括1但不包括这个数本身的约数(又称真因数)
真约数:除了自身以外的约数

例如:6的约数(因子)有1、2、3、6,真因子是1、2、3。

最后再来看前面完数的定义

完数:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

你有没有发现,在许多对完数定义或问题中常常说:完数=因子之和,但因子还包括它本身,不应该是 完数=真因子之和吗 ??
当然,在详细介绍时:完数是它所有的真因子之和

我不知道这是为什么???
是我理解错了,还是这种表示是用习惯了吧!!!

还是其他原因:
如果你知道,请留言,谢谢!!

在这里插入图片描述
在这里插入图片描述

发布了24 篇原创文章 · 获赞 53 · 访问量 865

猜你喜欢

转载自blog.csdn.net/weixin_46022083/article/details/105725008