用c语言编写程序:一个数如果刚好与它所有的因子之和相等,则称该数为一个"完数",如:6=1+2+3,则6就是一个完数。求出10000以内的完数的个数。
时间: 2024-12-01 08:29:15 浏览: 24
在C语言中,我们可以编写一个函数来检查一个数是否是完数,然后遍历给定范围内的所有整数,统计完数的数量。以下是实现的一个简单示例:
```c
#include <stdio.h>
#include <stdbool.h> // 使用布尔类型
bool isPerfectNumber(int num) {
int sum = 1; // 先将1加入因子之和
for (int i = 2; i * i <= num; i++) { // 只需检查到sqrt(num)
if (num % i == 0) {
// 如果i是因子,那么num/i也是因子,但为了防止重复计数,我们只取较小的因子
if (i != num / i) {
sum += i + num / i; // 加上两个因子
} else {
sum += i; // 如果i已经是num/i,就直接加i一次
}
}
}
return sum == num; // 如果因子之和等于原数,返回true;否则,false
}
int countPerfectNumbers(int upperLimit) {
int count = 0;
for (int i = 1; i <= upperLimit; i++) {
if (isPerfectNumber(i)) {
count++;
}
}
return count;
}
int main() {
int limit = 10000;
printf("在10000以内有%d个完数。\n", countPerfectNumbers(limit));
return 0;
}
```
这段代码首先定义了一个`isPerfectNumber`函数用于判断一个数是否是完数,接着在`countPerfectNumbers`函数中计算1到给定上限内完数的个数。
阅读全文