用c语言写求1~10000内的所有完美数。所谓的“完美数”是指这个数的所有真因子(即除自身的所有因子)的和恰好等于它本身。
时间: 2024-12-16 12:31:22 浏览: 10
C语言实现查找并打印所有三位数的水仙花数
在C语言中,我们可以编写一个函数来检查并找出1到10000之间的完美数。首先,我们需要了解什么是真因子。对于一个数n,如果a是它的因数,那么a也是真因子,当且仅当a不等于n。
下面是一个简单的示例程序,利用嵌套循环遍历每个数,并计算其小于自身的所有因数之和:
```c
#include <stdio.h>
// 判断是否是真因子
int is_factor(int num, int div) {
if (div > num / div)
return num % div == 0;
else
return 0;
}
// 求完美数
int find_perfect_numbers(int limit) {
for (int i = 1; i <= limit; ++i) {
int sum = 1; // 自身总是真因子
for (int j = 2; j * j <= i; ++j) { // 只需检查到sqrt(i)
if (is_factor(i, j))
sum += j;
if (is_factor(i, i / j)) // 因为j已经检查过了,这里再次加一次i/j
sum += i / j;
}
// 如果sum等于i,则找到一个完美数
if (sum == i)
printf("%d 是一个完美数.\n", i);
}
}
int main() {
int max_num = 10000;
find_perfect_numbers(max_num);
return 0;
}
```
阅读全文