首页 > 编程笔记 > C语言笔记

C语言求完数(有代码有解析)

在探讨如何用C语言求完数之前,我们先来了解一下什么是完数。完数是一个特殊的正整数,它等于除自身以外的所有正因子之和。换句话说,如果我们把一个数的所有正因子(不包括这个数本身)加起来,结果恰好等于这个数本身,那么这个数就是完数。
 

举个例子,让我们来看看 6 这个数。6 的正因子有 1、2、3(不包括 6 本身),将这些因子相加:1 + 2 + 3 = 6。因此,6 就是一个完数。类似地,28 也是一个完数,因为 28 的正因子之和为:1 + 2 + 4 + 7 + 14 = 28。
 

现在我们已经理解了完数的概念,接下来让我们用C语言来编写一个程序,找出给定范围内的所有完数。我们将把这个过程分解成几个步骤:


让我们来看看具体的代码实现:

#include <stdio.h>

// 判断一个数是否为完数的函数
int isPerfectNumber(int num) {
    int sum = 0;
    for (int i = 1; i < num; i++) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return (sum == num);
}

int main() {
    int start, end;
    
    printf("请输入要查找完数的范围(起始值和结束值):");
    scanf("%d %d", &start, &end);
    
    printf("%d 到 %d 之间的完数有:\n", start, end);
    
    for (int i = start; i <= end; i++) {
        if (isPerfectNumber(i)) {
            printf("%d ", i);
        }
    }
    
    printf("\n");
    return 0;
}

让我们详细解释一下这段代码:
 

isPerfectNumber 函数接受一个整数参数 num,它会计算 num 的所有正因子(不包括 num 本身)的和。函数通过遍历从 1 到 num-1 的所有数,检查哪些数是 num 的因子(使用取模运算 % 来判断),如果是因子就将其加到 sum 中。最后,函数比较 sum 和 num,如果相等则返回 1(表示 num 是完数),否则返回 0。
 

在 main 函数中,我们首先提示用户输入要查找完数的范围。然后,我们使用一个 for 循环遍历这个范围内的所有数,对每个数调用 isPerfectNumber 函数。如果函数返回真(即该数是完数),我们就将其打印出来。
 

让我们运行这个程序,查找 1 到 10000 之间的所有完数:

请输入要查找完数的范围(起始值和结束值):1 10000
1 到 10000 之间的完数有:
6 28 496 8128

这个结果告诉我们,在 1 到 10000 之间,有四个完数:6、28、496 和 8128。
 

值得注意的是,完数在数学界一直是一个有趣的研究对象。截至目前,人们只发现了 51 个完数,其中最大的一个有 49724095 位数字,寻找新的完数仍然是数学研究的一个活跃领域。
 

这个程序虽然简单,但它展示了如何将一个数学概念转化为计算机程序。通过定义函数、使用循环和条件语句,我们成功地实现了寻找完数的算法。对于初学者来说,这是一个很好的练习,可以帮助理解函数、循环和基本的数学运算在编程中的应用。

相关文章