实例019:完数 一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数。
实例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以内的所有完数。相关推荐
- C语言学习之一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数。
一个数如果恰好等于它的因子之和,这个数就称为"完数".例如:6的因子为1,2,3,而6=1+2+3,因此6是"完数".编程序找出1000之内的所有完数,并按下面 ...
- 一个数如果恰好等于它的因子之和,这个数就称为 完数 。例如6=1+2+3.编程 找出1000以内的所有完数。
一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1000以内的所有完数. 思路:首先求出一个数的所有因子 在判断这个数的所有因子之和与它本身 ...
- 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。
一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1000以内的所有完数. 代码如下: public class wanshu {public ...
- 一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3.编程 找出1000以内的所有完数
/** * 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出1000以内的所有完数 * @author Dreamweaver * */ ...
- C语言编程找出1000以内的所有完数
问题描述:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 问题分析:控制好for循环是关键 程序源码: #include ...
- 1000以内完数c语言程序_编程找出1000以内的所有完数
编程找出1000以内的所有完数 #include "stdio.h" #include "conio.h" main() { static int k[10]; ...
- python一个数如果恰好等于它的因子之和,这个数就称为“完数“。
[开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Python [开发目的]:这是老师布置的作业啦~ 供初学者参考学习 [开发者]:江西农业大学2 ...
- 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “
完数,又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为"完数".所有的完全数都是三角形 ...
- RUNOOB python练习题19 找出1000以内的所有完数
用来练手的python 练习题,原链接 : python练习实例19 题干: 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完 ...
最新文章
- DDOS三种不同类型的攻击行为—Vecloud
- StratifiedKFold()与KFold()比较
- 扔掉 Postman,一个工具全部搞定,真香!
- 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
- Python datetime timedelta
- P0INP = 0Xfd;P1DIR |= 0X01;
- 1.6QQ拼音输入的亮点——相框
- QFIL and FASTBOOT
- 详解 ManualResetEvent
- C++中数据类型int, short, long, long long的数据范围
- codevs 1044 拦截导弹
- 通过periodic_task.periodic_task 实现周期性任务的原理
- macbook proa1708_MacBook Pro 2017 A1708自己更换电池
- windows系统常量
- [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》
- Linux下的终端中用shell命令打开文件夹窗口
- jmeter 运行接口报javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection的解决方法
- nginx实现https转发
- 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
- 百度云for mac破解方法--获取无限svip
热门文章
- Java并发编程的艺术-Java并发编程基础
- 计算机行业到底还能火多久?
- Jude导出Java代码
- 算法设计与分析复习--回溯法
- java.sql.SQLException: Table 'XXX' is marked as crashed and should be repaired异常修复
- ps中怎么导出tif_用Photoshop自动切割大型TIFF文件并将切片保存到TIFF文件中?
- 怎样使用JPQL查询出每个部门员工的平均工资和最高工资
- 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
- 图片+文案(在图片上)
- 新月音标_又一个新月?