c语言怎么输出6=1 2 3,请问 求1000以内完全数的c语言程序怎么写,并且结果要按格式输出因子,如:6=1+2+3...

匿名用户

1级

2016-10-12 回答

回答如下:

#include "stdio.h"

int main(void){

int i,j,m;

for(i=4;i<1000;i+=2){

for(m=1,j=2;j*j<=i;j++)

if(!(i%j))

m+=(j!=i/j ? j+i/j : j);

if(m==i){

printf("%3d = 1",i);

for((m>>=1)+=1,j=2;j

if(!(i%j))

printf("+%d",j);

printf("\n");

}

}

return 0;

}

追问:

能不能讲一讲思路

追答:

看注释:

int main(void){

int i,j,m;

for(i=4;i<1000;i+=2){//迄今发现的完数都是偶数,所以只考察1000内的偶数

for(m=1,j=2;j*j<=i;j++)//用2、3、4……去除i,直到i的平方根

if(!(i%j))//若能整除则把由下一句把因子加到m上,m初值=1是因为1肯定是因子

m+=(j!=i/j ? j+i/j : j);//这个判断解决两个因子相等时只加一个,不等加两个

if(m==i){//当因子和m等于i时i就是完数,由以下语句输出因子和的表达式

printf("%3d = 1",i);//先打个当然因子1

for((m>>=1)+=1,j=2;j

if(!(i%j))//若能整除,则j就是它的一个因子

printf("+%d",j);//将这个因子用+号连接输出

printf("\n");

}

}

return 0;

}

追问:

就是说为了在结果里打出他的约数就必须把那次循环写两次对吧。

追答:

没有写两次!头一个循环是考察i是不是完数,第二个循环是对"完数"进行约数分解。如果不是完数,第二循环就不进行,但考察完数的第一个循环必须是穷举的,对范围办的偶数都要考察一遍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值