[英]Why is the outcome of problem 23 of project Euler wrong?
我正在尝试解决 Euler 项目(一个有数学谜题的网站)的问题 23。 问题 23 是这样的:
我用 Python 写了一些代码,但是我的结果是错误的,我不知道为什么它是错误的。 有人可以帮助我并告诉我代码中的哪一部分是错误的吗?
解释代码:在前 8 行中,我尝试获取所有丰富的数字并将它们放入lst1
。 在后 8 行中,我检查了lst1
中的所有丰富数字,并获得 2 个丰富数字的所有可能组合,并将这 2 个相加。 总和使 I 进入lst2
。 在最后几行中,我检查了从12 to 28123
的所有数字,看看它们是否匹配lst2
。 如果它们匹配,则可以将数字写为两个丰富数字的总和。 如果它们不匹配,我将它们添加到lst3
。 然后我打印lst3
的总和。 结果是: 395465560
。
lst1 = []
for i in range(1, 28123):
total = 0
for j in range(1, i // 2 + 1):
if i % j == 0:
total += j
if total > i:
lst1.append(i)
lst2 = []
for x in lst1:
for y in lst1:
total = x + y
if total > 28123:
break
else:
lst2.append(total)
lst3 = []
for z in range(12, 28123 + 1):
if z != lst2:
lst3.append(z)
print(sum(lst3))
如果您只检查以下输出:
print(sum(range(12, 28123 + 1)))
你会得到395465560
。 因此,您正在总结此范围内的所有数字。 为什么? 由于最后几行代码中的这个错误:
lst3 = []
for z in range(12, 28123 + 1):
# if z != lst2:
if z not in lst2:
lst3.append(z)
print(sum(lst3))
此外,您可以使用itertools
和 set 更快地编写相同的代码。
import itertools
abundant_numbers = []
abundant_range = range(1, 28123+1)
for i in abundant_range:
total = 1
for j in range(2, i // 2 + 1):
if i % j == 0:
total += j
if total > i:
abundant_numbers.append(i)
sum_of_abundant_numbers = [sum(p) for p in itertools.product(abundant_numbers, abundant_numbers)]
abundant_numbers_2 = [a for a in sum_of_abundant_numbers if a <= 28123]
k1 = set(abundant_range)
print(sum(k1 - set(abundant_numbers_2)))
以上可以进一步减少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.