实例019:完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

程序分析:

将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。

代码复现:

# 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。# 什么是完数?
# 如果一个数恰好等于它的真因子之和,则称该数为“完全数”。
# 真因子(即除了自身以外的约数)
import mathperfect_number = []  # 用来存放1000以内的 完数
for num in range(2, 1001):  # 思考:为什么从2开始? 而不是1开始? ---->根据完数定义,1的因数只有1,完数要真因子之和,要除去他本身,因此1不是完数factor = set()  # 定义一个set集合 用来存放某个数的真因数    set()  无序不重复元素集for i in range(1, int(math.sqrt(num)) + 1):  # 循环遍历求解得到每个数的因数   思考:这里为什么是int(math.sqrt(num)) + 1  而不是math.sqrt(num) + 1? --->  因为range范围只能是整数if num % i == 0:factor.add(i)factor.add(num // i)  # i是从小到大递增的,因此在前面增加了i时,同时可以把num//i也增加进去,因此我们在前面for循环时就不用循环到后面部分,只要到num//2就好了# factor.discard(num)  # 除去他本身,因为在上面一行factor.add(int(num / i))增加时当i=1时会把他本身加进去factor.remove(num)  # --->用discard删除时如果set中不存在该元素不会报错,但是remove就会报错。if sum(factor) == num:print('完数', num, '的真因子有:', factor)perfect_number.append(num)print(perfect_number)# 写法二
# def factor(num):
#     num = int(num)
#     res = set()
#     for i in range(1, int(num / 2)):
#         if num % i == 0:
#             res.add(i)
#             res.add(num / i)
#     # print(num,'--',res)
#     return res
#
#
# for i in range(2, 1001):
#     if i == sum(factor(i)) - i:  # -i就是要去掉他本身,即所谓真因子
#         print(i)

运行结果:

完数 6 的真因子有: {1, 2, 3}
完数 28 的真因子有: {1, 2, 4, 7, 14}
完数 496 的真因子有: {1, 2, 4, 8, 16, 248, 124, 62, 31}
[6, 28, 496]Process finished with exit code 0

实例019:完数 一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数。相关推荐

  1. C语言学习之一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数。

    一个数如果恰好等于它的因子之和,这个数就称为"完数".例如:6的因子为1,2,3,而6=1+2+3,因此6是"完数".编程序找出1000之内的所有完数,并按下面 ...

  2. 一个数如果恰好等于它的因子之和,这个数就称为 完数 。例如6=1+2+3.编程 找出1000以内的所有完数。

    一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1000以内的所有完数. 思路:首先求出一个数的所有因子 在判断这个数的所有因子之和与它本身 ...

  3. 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。

    一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1000以内的所有完数. 代码如下: public class wanshu {public ...

  4. 一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3.编程 找出1000以内的所有完数

    /**  * 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数  * @author Dreamweaver  *  */ ...

  5. C语言编程找出1000以内的所有完数

    问题描述:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 问题分析:控制好for循环是关键 程序源码: #include ...

  6. 1000以内完数c语言程序_编程找出1000以内的所有完数

    编程找出1000以内的所有完数 #include "stdio.h" #include "conio.h" main() { static int k[10]; ...

  7. python一个数如果恰好等于它的因子之和,这个数就称为“完数“。

    [开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Python [开发目的]:这是老师布置的作业啦~ 供初学者参考学习 [开发者]:江西农业大学2 ...

  8. 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “

    完数,又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为"完数".所有的完全数都是三角形 ...

  9. RUNOOB python练习题19 找出1000以内的所有完数

    用来练手的python 练习题,原链接 : python练习实例19 题干: 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完 ...

最新文章

  1. DDOS三种不同类型的攻击行为—Vecloud
  2. StratifiedKFold()与KFold()比较
  3. 扔掉 Postman,一个工具全部搞定,真香!
  4. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
  5. Python datetime timedelta
  6. P0INP = 0Xfd;P1DIR |= 0X01;
  7. 1.6QQ拼音输入的亮点——相框
  8. QFIL and FASTBOOT
  9. 详解 ManualResetEvent
  10. C++中数据类型int, short, long, long long的数据范围
  11. codevs 1044 拦截导弹
  12. 通过periodic_task.periodic_task 实现周期性任务的原理
  13. macbook proa1708_MacBook Pro 2017 A1708自己更换电池
  14. windows系统常量
  15. [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》
  16. Linux下的终端中用shell命令打开文件夹窗口
  17. jmeter 运行接口报javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection的解决方法
  18. nginx实现https转发
  19. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
  20. 百度云for mac破解方法--获取无限svip

热门文章

  1. Java并发编程的艺术-Java并发编程基础
  2. 计算机行业到底还能火多久?
  3. Jude导出Java代码
  4. 算法设计与分析复习--回溯法
  5. java.sql.SQLException: Table 'XXX' is marked as crashed and should be repaired异常修复
  6. ps中怎么导出tif_用Photoshop自动切割大型TIFF文件并将切片保存到TIFF文件中?
  7. 怎样使用JPQL查询出每个部门员工的平均工资和最高工资
  8. 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
  9. 图片+文案(在图片上)
  10. 新月音标_又一个新月?