100以内完数C语言如何实现?

99ANYc3cd6
预计阅读时长 6 分钟
位置: 首页 C语言 正文

寻找100以内的完数(C语言实现)

完数是指一个数等于它的所有真因子(不包括它本身)之和的数,6的真因子是1、2、3,而1+2+3=6,所以6是完数。

求100以内完数 c 语言
(图片来源网络,侵删)

以下是使用C语言查找100以内所有完数的代码:

#include <stdio.h>
int main() {
    int num, sum, i;
    printf("100以内的完数有:\n");
    for (num = 2; num <= 100; num++) {
        sum = 1; // 1是所有数的真因子
        // 寻找真因子并计算它们的和
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
        // 判断是否为完数
        if (sum == num) {
            printf("%d\n", num);
        }
    }
    return 0;
}

代码说明:

  1. 我们使用嵌套循环来检查每个数字
  2. 外层循环遍历2到100的所有数字
  3. 内层循环检查每个数字的所有真因子(从2到该数的一半)
  4. 将所有真因子相加,如果和等于原数,则该数是完数
  5. 最后输出所有找到的完数

输出结果:

运行上述程序将输出:

100以内的完数有:
6
28

优化建议:

如果需要提高效率,可以优化内层循环的上限为sqrt(num),因为如果inum的因子,那么num/i也是num的因子:

#include <stdio.h>
#include <math.h>
int main() {
    int num, sum, i;
    printf("100以内的完数有:\n");
    for (num = 2; num <= 100; num++) {
        sum = 1; // 1是所有数的真因子
        // 优化:只需检查到平方根
        for (i = 2; i <= sqrt(num); i++) {
            if (num % i == 0) {
                sum += i;
                if (i != num / i) { // 避免重复添加平方数
                    sum += num / i;
                }
            }
        }
        // 判断是否为完数
        if (sum == num) {
            printf("%d\n", num);
        }
    }
    return 0;
}

这个优化版本可以减少不必要的计算,特别是对于较大的数字。

求100以内完数 c 语言
(图片来源网络,侵删)
求100以内完数 c 语言
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦如何调用上级栏目链接?
« 上一篇 前天
dede小说模板带手机版如何适配手机端?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]