在数学中,“完数”(Perfect Number)是指一个正整数,它等于其所有真因子(即除了自身以外的正因子)之和。例如,6 是一个完数,因为它的真因子是 1、2 和 3,而 1 + 2 + 3 = 6。
下面我们通过 C 语言来实现一个简单的程序,用于判断某个给定的数字是否为完数,并列出其所有真因子。
```c
include
// 函数:判断一个数是否为完数
int isPerfectNumber(int num) {
int sum = 0;
// 遍历所有可能的真因子
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) { // 如果 i 是 num 的因子
sum += i;
}
}
return sum == num; // 如果因子和等于 num,则是完数
}
// 主函数
int main() {
int number;
printf("请输入一个正整数: ");
scanf("%d", &number);
if (isPerfectNumber(number)) {
printf("%d 是一个完数。\n", number);
printf("它的真因子为: ", number);
for (int i = 1; i <= number / 2; i++) {
if (number % i == 0) {
printf("%d ", i);
}
}
printf("\n");
} else {
printf("%d 不是一个完数。\n", number);
}
return 0;
}
```
程序解析:
1. isPerfectNumber 函数:
- 这个函数接收一个整数 `num` 作为参数。
- 使用循环遍历从 1 到 `num/2` 的所有整数,检查它们是否为 `num` 的因子。
- 如果是因子,将其累加到变量 `sum` 中。
- 最后,比较 `sum` 是否等于 `num`。如果相等,则返回 1(表示是完数),否则返回 0。
2. 主函数:
- 提示用户输入一个正整数。
- 调用 `isPerfectNumber` 函数判断该数是否为完数。
- 如果是完数,打印出该数及其所有真因子;如果不是,则输出相应的提示信息。
示例运行:
假设用户输入数字 28:
```
请输入一个正整数: 28
28 是一个完数。
它的真因子为: 1 2 4 7 14
```
总结:
通过这个简单的 C 程序,我们可以轻松地判断一个数是否为完数,并列出其所有真因子。这种程序不仅可以帮助我们理解完数的概念,还可以扩展到其他数学问题的解决上。