Неверный вывод Project Euler # 50 - PullRequest
       0

Неверный вывод Project Euler # 50

0 голосов
/ 01 ноября 2018

Задача 50 проекта Эйлера гласит:

Простое число 41 можно записать как сумму шести последовательных простых чисел:

41 = 2 + 3 + 5 + 7 + 11 + 13 Это самая длинная сумма последовательных простых чисел, которая добавляет к простому числу меньше ста.

Самая длинная сумма последовательных простых чисел меньше одной тысячи, которая добавляет простое число, содержит 21 член и равна 953.

Какое простое число, меньшее одного миллиона, можно записать как сумму самых последовательных простых чисел?

В моем подходе я предварительно составил список простых чисел, используя сито эратосфена, затем в самой функции я продолжаю добавлять последующие элементы моего списка простых чисел и каждый раз, когда я делаю это, я проверяю, является ли сама сумма простой, и если это так, я отслеживаю ее как самую большую и возвращаю ее. Ну, это должно работать, я думаю? Очевидно, что ответ неправильный, но интересно то, что когда я меняю сито, чтобы получить простые числа ниже 100000, это не дает ошибку индекса, но дает другой результат.

from algorithms import gen_primes

primes = [i for i in gen_primes(1000000)]


def main(n):
    idx, total, maximum = 0, 0, 0
    while total < n:
        total += primes[idx]
        idx += 1
        if total in primes:
            maximum = total
    return maximum


print(main(1000000))

1 Ответ

0 голосов
/ 01 ноября 2018

Ваша программа не решает общую проблему: вы всегда начинаете свой список последовательных простых чисел с самого низкого значения, 2. Таким образом, вы возвращаете самый длинный последовательный список, начинающийся с 2 *, а не любой последовательный список простых чисел.

Короче, тебе нужен еще один цикл ...

start_idx = 0
while start_idx < len(primes) and best_len*primes[start_idx] < n:
    # find longest list starting at primes[start_idx]
    start_idx += 1

В случае, если это поможет, успешная последовательность начинается между 1500 и 2000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...