发布网友 发布时间:2022-05-11 13:42
共4个回答
热心网友 时间:2023-10-13 11:56
源代码如下:
#include <stdio.h>
main()
{
int i,j;
int sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i)
{
printf("%d its factors are ",i);
for(j=1;j<i;j++)
if(i%j==0)
printf("%d ",j);
}
printf("\n");
}
扩展资料
1、完全数是一些特殊的自然数,它所有的真因子即除了自身以外的约数的和即因子函数,恰好等于它本身。
2、第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28。
3、有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。
热心网友 时间:2023-10-13 11:56
//看我给你改写的。
#include<stdio.h>
int main()
{
int sum=0;
for(int i=1;i<=1000;i++) //循环在1-1000内进行
{
sum=0; //每次循环都先将sum初始化为0
for(int j=1;j<i;j++) //内层循环
if(i%j==0) //如果j能被i整除,则j是i的因数
sum+=j; //就累加到sum中
if(sum==i) //如果和sum等于i这个值
{
printf("完全数有:%d=1",i); //则输出
for(j=2;j<i;j++)
if(i%j==0)
printf("+%d",j);
printf("\n");
}
}
return 0;
}
热心网友 时间:2023-10-13 11:57
#include<stdio.h>热心网友 时间:2023-10-13 11:57
for(j = 1;j < i;j++)追答额,k是因数的个数。但是要注意,a[k]是数组下标越界的。你用s+=a[k]的目的,是想说在最外层循环作用下每次可以加一个a[k]嘛?那就完全不对了啊。最外层循环是从1,2,……1000每次一个数来验证这个数是不是完数。而完数的定义是这个数的所有因数之和等于该数,所以s的最终结果是数i的所有因数之和。数组a[]是用来存放每一轮的i的因数们的,一共有k个,分别是a[0],a[1],...a[k-1],而s = a[0] + a[1] + ... + a[k -1]。这个加法必须用循环来写,所以出现了h从0到k-1的循环。