У меня возникла проблема с решением задачи:
Простое число 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?