euler/python/e050.py

34 lines
1.1 KiB
Python

from lib_prime import primes
def find_max_series(start_index, series_list, series_set):
""" Start at the given index and sum up consecutive primes
into total. If a total is in the series_set (i.e. a prime) then
store the current number of consecutive primes (length) and the total.
If the total exceeds the last value of the given primes no longer
sequence can be found. Return the max sequence length and total. """
series_max = series_list[-1]
total_max = 0
total = 0
for i in range(start_index, len(series_list)):
total = total + series_list[i]
if total in series_set:
length = i - start_index + 1
total_max = total
if total > series_max:
return (length, total_max)
def euler_050():
n_max = 1000000
ps = primes(n_max)
ps_set = set(ps)
s = max([x for x in [find_max_series(i, ps, ps_set)
for i in range(0, len(ps))] if x])
return s[1]
if __name__ == "__main__":
print("e050.py: " + str(euler_050()))
assert(euler_050() == 997651)