错误的输出Project Euler#50 Python 3

时间:2018-01-12 04:21:06

标签: python math

我正在尝试Project Euler#50。真有趣!问题如下。

  

素数41,可以写成六个连续素数的总和:

41 = 2 + 3 + 5 + 7 + 11 + 13  
  

这是连续素数的最长总和,它增加到低于一百的素数。连续素数低于1000的连续素数加上一个素数,包含21个项,等于953.哪个素数低于一百万,可以写成最连续素数的总和?

我的代码如下。它是用Python 3.5.4编写的。

sieve = [True] * 1000000
listSieve = []
listOfNum = []
sumOfNum = 0
s = 0
for p in range(2, 1000000):
    if sieve[p]:
        listSieve.append(p)
        for i in range(p*p, 1000000, p):
            sieve[i] = False

while sumOfNum < 1000000:
    sumOfNum += listSieve[s]
    listOfNum.append(sumOfNum)
    s += 1

finalSet = list(set(listSieve) & set(listOfNum))
print(listOfNum)
print(max(finalSet))

基本上,它使用eratosthenes筛子(listSieve)生成两个列表,一个是素数高达100万,另一个是通过添加连续素数(listOfNum)创建的数字列表。很抱歉,变量名称并不壮观。然后我交叉引用列表以找到连续的素数,并输出最高的素数。正确答案是997651,但我的程序输出958577.可能出错了什么?

0 个答案:

没有答案