版权所有:东北大学计算中心
问题:输出
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;
}
流程图