输出1000以内所有的完数,并输出其所有的因子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题:输出1000以内所有的完数,并输出其所有的因子。完数的定义如下:一个数的所有因子(除其自身)之和恰好等于其自身。

分析:问题的关键为求解一个数的所有因子,并求其和。假设当前的数m,计算其因子的过程,为遍历从1到 m-1所有的数,并判定是否可以整除m。

数据要求

问题中的常量:

#define N 1000 /*完数求解范围*/

问题的输入:

问题的输出:

int i /*当前完数*/

int j /*当前完数的因子*/

初始算法

1.因子和初始化为0

2.遍历当前整数的因子并计算因子和

3.判断是否完数

4.输出完数及其因子

算法细化

步骤2遍历当前整数的因子并计算因子和的细化:

计算整数m所有因子之和的过程如下:

sum=0;

for(j=1;j

{

if(m%j==0) /*j为m 的因子*/

sum=sum+j;

}

又根据一个数除本身以外的所有因数都小于或等于这个数的一半,可以对上述循环进一步处理,减少循环次数。

sum=0;

for(j=1;j<=m/2;j++)

{

if(m%j==0) /*j为m 的因子*/

sum=sum+j;

}

流程图

程序代码如下:

#include "stdio.h"

#include "math.h"

#define N 1000 /*完数求解范围*/

void main()

{

unsigned int i,j,sum;

for(i=1;i

{

sum=0;

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

{

if(i%j==0)

sum=sum+j;

}

if(sum==i)

{

printf("\n%5d\n",i);

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

{

if(i%j==0)

printf("%5d",j);

}

}

}

}

程序运行结果如下:

6

1 2 3

28

1 2 4 7 14

496

1 2 4 8 16 31 62 124 248

相关文档
最新文档