繁体   English   中英

为什么欧拉计划第23题的结果是错误的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM