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)