C语言实现1-1000自然数中所有完数

(1)啥是完数?

因子和等于该数本身的数。

一个正整数如果恰好等于除它本身之外所有正除数之和,那么这个数就被称为完数。

例如,6是一个完数,因为6的正除数(不包括6本身)是1、2、3,而1 + 2 + 3 = 6。

另一个例子是28,它的正除数(不包括28本身)是1、2、4、7、14,而1 + 2 + 4 + 7 + 14 = 28。

(2)代码思想

  要找出1到1000之间的所有完数,我们可以编写一个程序,该程序遍历这个范围内的每个数,并计算每个数的所有因子(不包括它自己),然后将这些因子加起来,检查它们的和是否等于这个数。

(3)代码实现

  在main函数中,我们定义了三个变量,n用来表示我们要检查的数字,sum用来存储n的所有因子之和,i用来帮助我们找到n的因子。在开始检查之前,我们先打印一行文字,告诉用户我们即将输出1到1000之间的完数。我们用一个循环(for循环)从1开始,一直检查到1000。对于每个数字n,我们都会重新计算它的因子之和。在检查每个新数字之前,我们把sum重置为0,这样它就可以用来存储下一个数字的因子之和。我们用另一个循环(内层for循环)来检查从1到n/2的每个数字i,看它是否是n的因子。如果是,我们就把它加到sum上。内层循环结束后,我们检查sum是否等于n。如果是,那么根据完数的定义,我们知道n是一个完数。如果n是一个完数,我们就打印出来,让用户知道。外层循环继续,直到检查完1到1000的所有数字。

#include <stdio.h>
int main() {
    int n, sum, i;
//n表示要检查的数字
//sum表示所有因子之和
    printf("1-1000之间的完数有:\n");
//0没办法除,从1开始
    for (n = 1; n <= 1000; n++) {
        sum = 0;
        // 寻找所有的因子并计算它们的和
        for (i = 1; i <= n / 2; i++) {
            if (n % i == 0) {
                sum += i;
            }
        }
        // 如果因子之和等于n,那么n是一个完数
        if (sum == n) {
            printf("%d\n", n);
        }
    }
    return 0;
}

#include <stdio.h>

int main() {
    int m, n, s;
    printf("1-1000之间的完数有:\n");
    for(m=2; m<1000; m++) {
        s = 0; // 初始化s为0,用于计算因子之和
        for(n=1; n<=m/2; n++) {
            if(m % n == 0) { // 检查n是否是m的因子
                s += n; // 如果是,将n加到s上
            }
        }
        if(s == m) { // 如果s等于m,那么m是一个完数
            printf("%d\n", m); // 打印完数m
        }
    }
    return 0;
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是lethe先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值