我正在尝试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.可能出错了什么?