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

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

问题的输出:
inti/*当前完数*/
int j/*当前完数的因子*/
初始算法
1.因子和初始化为0
2.遍历当前整数的因子并计算因子和
3.判断是否完数
4.输出完数及其因子
算法细化
步骤2遍历当前整数的因子并计算因子和的细化:
计算整数m所有因子之和的过程如下:
sum=0;
for(j=1;j<m;j++)
#include "stdio.h"
#include "math.h"
#define N 1000/*完数求解范围*/
void main()
{
unsigned int i,j,sum;
for(i=1;i<N;i++)
{
sum=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
sum=sum+j;
问题:输出1000以内所有的完数,并输出其所有的因子。完数的定义如下:一个数的所有因子(除其自身)之和恰好等于其自身。
分析:问题的关键为求解一个数的所有因子,并求其和。假设当前的数m,计算其因子的过程,为遍历从1到 m-1所有的数,并判定是否可以整除m。
数据要求
问题中的常量:
#define N 1000/*完数求解范围*/
}
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
相关文档
最新文档