用c语言实现:输入一个正整数n,找出1-n之间的所有完数。
时间: 2023-11-22 21:06:00 浏览: 931
查找1到n的完数(c语言版)
4星 · 用户满意度95%
完数指的是一个正整数,它的所有因子(不包括它本身)之和等于它本身。例如,6是一个完数,因为6的因子为1、2、3,而1+2+3=6。
以下是用C语言实现的代码:
```c
#include <stdio.h>
int main() {
int n, i, j, sum;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("1-%d之间的完数有:\n", n);
for (i = 2; i <= n; i++) {
sum = 1;
for (j = 2; j <= i / 2; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
printf("%d ", i);
}
}
return 0;
}
```
代码解析:
1. 首先,我们使用scanf()函数从用户输入中获取一个正整数n。
2. 然后,我们使用两个循环来遍历1-n之间的所有数。外部循环变量i从2开始,因为1不是完数。
3. 对于每个数i,我们使用内部循环变量j来计算它的因子之和。我们从2开始遍历到i / 2,因为i最多只能被它的一半整除。
4. 如果j是i的因子,我们将它添加到sum变量中。
5. 最后,如果sum等于i,那么i就是一个完数,我们将它打印出来。
注意:这个算法的时间复杂度是O(n^2),因为对于1-n之间的每个数,我们都需要遍历它的所有因子。对于大的n值,这可能会导致程序运行缓慢。
阅读全文