The prime 41, can be written as the sum of six consecutive primes:
41 = 2 + 3 + 5 + 7 + 11 + 13
This is the longest sum of consecutive primes that adds to a prime below one-hundred.
The longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953.
Which prime, below one-million, can be written as the sum of the most consecutive primes?
In [1]:
from euler import gen_lt, gen_prime
In [2]:
def foo(n):
limit = 10 ** n
primes = list(gen_lt(gen_prime(), limit))
ps = set(primes)
delta_longest = 0
for i in range(len(primes)):
total = sum(primes[i:i+delta_longest])
for j in range(i + delta_longest, len(primes)):
total += primes[j]
if total > limit:
if j - i <= delta_longest:
return sum(primes[i_longest:i_longest+delta_longest+1])
break
if total in ps and j - i > delta_longest:
delta_longest = j - i
i_longest = i
print i_longest, delta_longest+1, primes[i_longest:i_longest+delta_longest+1], sum(primes[i_longest:i_longest+delta_longest+1])
# print delta_longest+1
return sum(primes[i_longest:i_longest+delta_longest+1])
In [3]:
n = 2
%timeit foo(n)
foo(n)
Out[3]:
In [4]:
n = 3
%timeit foo(n)
foo(n)
Out[4]:
In [5]:
n = 6
%timeit foo(n)
foo(n)
Out[5]: