C语言 一个数如果恰好等于它的因子之和,这个数就称为“完数”。如6=1+2+3.找出1000以内的所有完数。

#include<stdio.h>voidmain(){intnum,sum=0,m;printf("1\t");for(num=2;num<=1000;num++)//... #include <stdio.h>
void main()
{
int num,sum=0,m;
printf("1\t");
for(num=2;num<=1000;num++)//控制num一直到1000
{
for(m=1;m<num;m++)//找出num的因子
{
if(num%m==0)
{
sum=sum+m;//num因子之和
}
}
if(sum==num)//判断num是否为完数
{
printf("%d\t",num);
}
}

}

这段代码哪里有问题?重写代码的不要。谢谢
展开
 我来答
休闲娱乐chl
高粉答主

2019-10-16 · 每个回答都超有意思的
知道大有可为答主
回答量:5627
采纳率:100%
帮助的人:142万
展开全部

include <iostream>

using namespace std;

int main() {

for (int i = 2; i <= 1000; i++) {//从2到1000的数

int sum = 0;//因子总和

for (int j = 1; (j * j) <= i; j++) {//j做除数,√n复杂度,减少一半的计算量

if (i % j == 0) {//可以整除,为其因子

sum = j + (i / j) + sum;//因子之和

}

}

if ((sum - i) == i) cout << "1000以内的完数:" << i << endl;//因子之和减去其本身(1*i也为其因子)如果等于这个数本身,则为完数

}

}

扩展资料

在数学领域,6是第一个完全数,也是最小的完全数。所谓完全数(又称完美数或完备数),是一种特殊的自然数;它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

例如6有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6;第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。公元前6世纪的古希腊数学家、哲学家毕达哥拉斯是最早探究完全数的人,他已经知道6和28这两个自然数是完全数了。

参考资料来源:百度百科-C语言

风若远去何人留
推荐于2017-11-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450103
专业C/C++软件开发

向TA提问 私信TA
展开全部

sum值 在每次进循环的时候 重新初始化一次 不然累加起来就出错了

#include <stdio.h>
void main()
{
 int num,sum=0,m;
 printf("1\t"); 
 for(num=2;num<=1000;num++)//控制num一直到1000 
    {
       sum = 0;//加一句这个。
     for(m=1;m<num;m++)//找出num的因子 
        {
         if(num%m==0)
         {
          sum=sum+m;//num因子之和 
         }
        }
        if(sum==num)//判断num是否为完数 
        {
         printf("%d\t",num);
        }
 }
 
}

试试吧

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式