任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。 如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。设计算法,判定给定的自然数是否是完美数。用C语言实现
时间: 2024-09-16 17:05:25 浏览: 143
为了判断一个自然数是否是完美数,我们可以创建一个函数,遍历该数的所有真约数(除了1和它本身),然后检查它们的和是否等于原数。以下是用C语言实现的一个简单算法:
```c
#include <stdio.h>
// 定义一个辅助函数,检查是否存在某个数是给定数的因子
int is_factor(int num, int factor) {
return (num % factor == 0); // 如果余数为0,则factor是num的因子
}
// 判定完美数的函数
int is_perfect_number(int n) {
int sum = 1; // 真约数初始和为1(包括1)
// 遍历从2到sqrt(n),检查每个数是否是n的因子
for (int i = 2; i * i <= n; i++) {
// 如果是因子,添加它的值和它的平方(因为每个因子及其自身都是n的因子)
if (is_factor(n, i)) {
sum += i;
if (i != n / i) { // 只对非平方根的情况添加另一个因子(如n=28,i=4,则只加4)
sum += n / i;
}
}
}
// 如果sum等于n,那么n就是完美数,返回1;否则返回0
return (sum == n) ? 1 : 0;
}
int main() {
int num;
printf("请输入一个自然数:");
scanf("%d", &num);
if (is_perfect_number(num)) {
printf("%d是一个完美数。\n", num);
} else {
printf("%d不是完美数。\n", num);
}
return 0;
}
```
阅读全文