用c语言怎样编写n个数以内的完全数的程序

用c语言怎样编写n个数以内的完全数的程序,第1张

完全数是指所有真因子之仿薯世和等于该数本身的正整数。可以使用以下C语言代码来找出小于等于n(n为正整数)的完备肢全数:

```c

#include <stdio.h>

int main() {

int n, i, j, sum

printf("请输入一个正整数n:")

scanf("%d", &n)

for (i = 1i <= n++i) {

sum = 0

for (j = 1j <= i / 2++j) {

if (i % j == 0) {

sum += j

}

}

if (sum == i) {

printf("%d\n", i)

}

}

return 0

}

```

解释如下:

1. 首先,定义变量n、i、j和sum。

2. 要求用户输入n。

3. 使用两个嵌套的循环来遍历从1到n的每个数字

4. 内部循环计算数字i的所有真因子之和。

5. 如果该总和等于数字i本身,则输出该数字,即它是一个完全数。

6. 最后返回0结束程序。

注意,此代码中包含了一个优化,即内部循环只需要手宴遍历1到i的一半,因为大于i的一半的因子已经在之前被计算过了。

如果想显示完全数的因子的话,用数组存储比较合适。你的程序有个逻辑错误。

if(a%b==0)你忘记还有自身也是自身的因子数,导致后面凳尺的判别局衫式永远不成立,应枣腊高改为

if(a%b==0&&a!=b)

自己改了下用数组的:

#include<stdio.h>

int

main()

{

int

k[20],a,b,c

for(a=2a<=1000a++)

{c=0

for(b=1b<=ab++)

{

if(a%b==0&&b!=a)

{

k[c]=b

c++

}

if(b==a){

int

num=0

for(int

i=0i<ci++)

num=num+k[i]

if(num==a){

printf("%d

",a)

printf("its

factors

is

:

")

for(int

i=0i<ci++)

printf("%d

",k[i])

printf("\n")

}

}

}

}

return

0

}

#include<stdio.h>

void main()

{

int i,t(0),m

printf("请输段枝入一个数:")

scnaf("%d",&m)

for(i=1i<mi++)

{

if(m%i==0)

t=t+i

}

if (t==m)

printf("该数是握埋敏完数")

else

printf("该数不是液唤完数")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存