错误的输出项目Euler#50

时间:2018-11-01 18:51:08

标签: python debugging math

欧拉计划问题50内容如下:

  

素数41,可以写为六个连续素数之和:

     

41 = 2 + 3 + 5 + 7 + 11 + 13   这是连续质数的最长总和,加成小于一百的质数。

     

一千个以下的连续素数的最长总和加上一个素数,包含21个项,等于953。

     

哪一个小于100万的素数可以写为最连续的素数之和?

在我的方法中,我使用橡皮擦筛子预先生成了素数列表,然后 在函数本身中,我不断添加素数列表的后续元素 每次执行此操作时,我都会检查总和本身是否为素数,是否一直为最大数并将其返回。好吧,我猜应该行吗?显然答案是错误的,但有趣的是,当我更改筛子以生成低于100000的质数时,它不会产生索引错误,但会给出另一个结果。

from algorithms import gen_primes

primes = [i for i in gen_primes(1000000)]


def main(n):
    idx, total, maximum = 0, 0, 0
    while total < n:
        total += primes[idx]
        idx += 1
        if total in primes:
            maximum = total
    return maximum


print(main(1000000))

1 个答案:

答案 0 :(得分:1)

您的程序不能解决一般问题:您总是 从最低的2开始连续质数的列表。因此,您返回的是从2 *开始的最长连续列表,而不是任何质数连续列表。

简而言之,您需要另一个循环...

start_idx = 0
while start_idx < len(primes) and best_len*primes[start_idx] < n:
    # find longest list starting at primes[start_idx]
    start_idx += 1

如果有帮助,成功的序列将从1500到2000之间开始。