<分区>
对于 ProjectEuler 上的一项任务,我编写了代码,使用蛮力查找小于 100 的最长素数链,这些素数相加为一个素数,代码确实给出了正确的结果。所以对于 100 以下的数字,答案是 2 + 3 + 5 + 7 + 11 + 13 = 41
import math
def prime(n):
for x in xrange(2,int(math.sqrt(n)+1)):
if n%x == 0:
return False
return True
primes = []
for x in xrange(2,100):
if prime(x):
primes += [x]
record = 0
i = 0
for num in primes:
i += 1
chain = [num]
for secnum in xrange(i,len(primes)-1):
chain += [primes[secnum]]
if len(chain) > record and sum(chain) in primes:
record = len(chain)
seq = chain
print seq
print seq
当我运行这段代码时,我得到了
[2, 3]
[2, 3, 5, 7]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89]
最后一行让我非常困惑。在我看来,这两个打印语句应该给出相同的结果。我的变量 seq 是如何分配给那个长列表的?最后一个列表甚至不满足分配 seq 的 if 语句的要求。我确定这是一些非常愚蠢的大脑放屁,但我就是想不通我搞砸了什么