每日经典算法题(九) 完全数

本文介绍了一个寻找1000以内完全数的算法。完全数是指其因子之和等于该数本身的整数。通过两层循环遍历1到1000的数字,检查每个数的因子(不包括自身),如果因子之和等于原数,则是完全数。给出的代码示例演示了如何实现这一算法,并展示了输出结果。
摘要由CSDN通过智能技术生成

每日经典算法题(九) 完全数

完数(完全数):Perfect Number

题目

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如:6 = 1+2+3。

编程:找出 1000 以内的所有完数。

程序分析

基本程序还是需要通过循环来完成,由于题目限定了范围所以这里我们用 for 循环更加适合。只要理解了如何判定这个数是否为完全数就很简单了。

思路

首先要思考什么是完全数,即他的真因子(除这个数本身以外的约数)相加之和为这个数。所以判断的过程就指向了如何找某个数的约数,依次找出这个数的约数然后将它们累加的结果和该数字比较,若相等这个数就是完全数。

为了方便理解,设定这个数为 n。由于 n 的真因子不包含本身,所以他的真因子最大为 n/2,即将判断约数的范围限定为 1 到 n/2 比较合适。

需要遍历的有:

  • 1 - 1000 之间的数字要逐一判断
  • 每个数字寻找约数需要从 1 - n/2 去逐一判断

所以我们需要二重 for 循环比较合适。在外层循环需要将约数求和然后和 n 比较结果,可以设定一个 sum 作为因数的和,在内层循环中可以利用 n 和遍历的整数除余是否为 0 来判断是否为因数,若是因数则直接累加在 sum上面。内层循环完成后在外面直接判断 n 和 sum 的值,若相等直接输出结果即可。

代码示例


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值