@Idwln

Как правильно поставить условие выполнения цикла в моём решении?

У меня возникла проблема с решением задачи:

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

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

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

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


Я решил её верно, ответ правильный. Но проблема в том, что в ином сценарии код может неотработать

Код:
def isPrime(n):
    if n % 2 == 0:
        return False
    for d in range(3,round(n**0.5)+1,2):
        if n % d == 0:
            return False
    return True

def primes(n):
    sieve = [True] * n
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
    return [2] + [i for i in range(3,n,2) if sieve[i]]

arr = primes(1_000_000)
value = 0
k = 0
res = 0
while k < 10:
    c = 0
    for x in arr:
        if value < 1_000_000:
            value += x
            c+=1
            if isPrime(value) and res < c:
                res = c
                number = value
    arr.pop(0)
    value = 0
    k+=1
print(res , number)


Проблема у меня возникла в задании условия для цикла while. Т.к мне нужно перебрать не только последовательности начинающие с 2(т.е первого простого числа), то скорее всего я должен вызвать цикл считающий колво слагаемых снова, но последовательность будет начинаться уже со следующим за двойкой простым числом. Почему скорее всего? Потому что я не уверен что такой метод вообще правилен, возможно есть возможность проитерировать цикл по другому, или же всё таки нужно просто правильно указать условие выполнения цикла while?
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы