青岛达内it培训 > 达内新闻
想深入学习python?这些基础练习,你都会了吗?!(2)
- 发布:青岛IT培训
- 来源:青岛IT培训
- 时间:2019-04-10 14:03
青岛IT培训的小编总结,第三题:完全数
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如,第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28.
编程求10000以内的完全数。
啊完全数,我感觉我与欧拉,梅森等数学大师又近了一步。
解题思路:
思考五分钟后完全没有思路,怎么确定一个数的所有真因子呢?百度一下看看是不是有什么模块有类似的函数吧…
没找到模块,不过找到了三行代码
shu=10000
result=[a for a in range(1,shu+1) if shu%a==0]
print(result)
(要不说Python牛逼,用c的话没有现成函数怎么也得几十行吧。)
好那现在可以尝试编写代码了
list_num = []
for i in range(1,10000):
if sum([ a for a in range(1,i) if i % a == 0]) == i:
list_num.append(i)
print(list_num)
五行代码…py天下第一!!!py天下第一!!!py天下第一!!!
#!/usr/bin/env python
def isPerfectNumber(n):
a = 1
b = n
s = 0
while a < b:
if n % a == 0:
s += a + b
a += 1
b = n / a
if a == b and a * b == n:
s += a
return s - n == n
for k in range(2, 10000):
if isPerfectNumber(k):
print k
思路相似,但用列表推导更简单

第四题:相亲数
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为1+2+4+71+142=220
毕达哥拉斯把这样的数对A、B称为相亲数:A的真因数之和为B,而B的真因数之和为A.
求100000以内的相亲数。
解题思路:
构建列表,遍历列表,求x的真因数并求和记作a,然后对a求真因数之和b,判断x?=b.
尝试解题:
list_num = []
for i in range(2,10000):
x = sum([a for a in range(1,i) if i % a == 0])
y = sum([b for b in range(1,x) if x % b == 0])
if i == y:
list_num.append((i,x))
print(list_num)
#运行结果:[(6, 6), (28, 28), (220, 284), (284, 220), (496, 496), (1184, 1210), (1210, 1184), (2620, 2924), (2924, 2620), (5020, 5564), (5564, 5020), (6232, 6368), (6368, 6232), (8128, 8128)]
可以看出有重复的,有完全数和本身的
可以考虑用集合,集合是无序的而且重复元素不出现
list_num = []
for i in range(2,10000):
x = sum([a for a in range(1,i) if i % a == 0])
y = sum([b for b in range(1,x) if x % b == 0])
if i == y and x != y and (i,x) :
m = {i,x}
list_num.append(m)
print(list_num)
#[{220, 284}, {220, 284}, {1184, 1210}, {1184, 1210}, {2924, 2620}, {2924, 2620}, {5564, 5020}, {5020, 5564}, {6232, 6368}, {6368, 6232}]
[Finished in 7.7s]
列表还是有重复,等回头再学习一下再修改
以上就是青岛IT培训给大家做的内容详解,更多关于UI的学习,请继续关注青岛IT培训
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 哈尔滨
- 济南
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 长沙
- 昆明
- 太原
- 无锡
- 石家庄
- 南宁
- 佛山
- 珠海
- 宁波
- 保定
- 呼和浩特
- 洛阳
- 烟台
- 运城
- 潍坊
想深入学习python?这些基础练习,你都会了吗?!(2)
- 发布:青岛IT培训
- 来源:青岛IT培训
- 时间:2019-04-10 14:03
青岛IT培训的小编总结,第三题:完全数
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如,第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28.
编程求10000以内的完全数。
啊完全数,我感觉我与欧拉,梅森等数学大师又近了一步。
解题思路:
思考五分钟后完全没有思路,怎么确定一个数的所有真因子呢?百度一下看看是不是有什么模块有类似的函数吧…
没找到模块,不过找到了三行代码
shu=10000
result=[a for a in range(1,shu+1) if shu%a==0]
print(result)
(要不说Python牛逼,用c的话没有现成函数怎么也得几十行吧。)
好那现在可以尝试编写代码了
list_num = []
for i in range(1,10000):
if sum([ a for a in range(1,i) if i % a == 0]) == i:
list_num.append(i)
print(list_num)
五行代码…py天下第一!!!py天下第一!!!py天下第一!!!
#!/usr/bin/env python
def isPerfectNumber(n):
a = 1
b = n
s = 0
while a < b:
if n % a == 0:
s += a + b
a += 1
b = n / a
if a == b and a * b == n:
s += a
return s - n == n
for k in range(2, 10000):
if isPerfectNumber(k):
print k
思路相似,但用列表推导更简单

第四题:相亲数
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为1+2+4+71+142=220
毕达哥拉斯把这样的数对A、B称为相亲数:A的真因数之和为B,而B的真因数之和为A.
求100000以内的相亲数。
解题思路:
构建列表,遍历列表,求x的真因数并求和记作a,然后对a求真因数之和b,判断x?=b.
尝试解题:
list_num = []
for i in range(2,10000):
x = sum([a for a in range(1,i) if i % a == 0])
y = sum([b for b in range(1,x) if x % b == 0])
if i == y:
list_num.append((i,x))
print(list_num)
#运行结果:[(6, 6), (28, 28), (220, 284), (284, 220), (496, 496), (1184, 1210), (1210, 1184), (2620, 2924), (2924, 2620), (5020, 5564), (5564, 5020), (6232, 6368), (6368, 6232), (8128, 8128)]
可以看出有重复的,有完全数和本身的
可以考虑用集合,集合是无序的而且重复元素不出现
list_num = []
for i in range(2,10000):
x = sum([a for a in range(1,i) if i % a == 0])
y = sum([b for b in range(1,x) if x % b == 0])
if i == y and x != y and (i,x) :
m = {i,x}
list_num.append(m)
print(list_num)
#[{220, 284}, {220, 284}, {1184, 1210}, {1184, 1210}, {2924, 2620}, {2924, 2620}, {5564, 5020}, {5020, 5564}, {6232, 6368}, {6368, 6232}]
[Finished in 7.7s]
列表还是有重复,等回头再学习一下再修改
以上就是青岛IT培训给大家做的内容详解,更多关于UI的学习,请继续关注青岛IT培训
最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 厦门
- 哈尔滨
- 济南
- 福州
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 大连
- 长沙
- 昆明
- 温州
- 太原
- 南昌
- 无锡
- 石家庄
- 南宁
- 中山
- 兰州
- 佛山
- 珠海
- 宁波
- 贵阳
- 保定
- 呼和浩特
- 东莞
- 洛阳
- 潍坊
- 烟台
- 运城