из данного списка получить массив подряд идущих простых чисел и найти их сумму
Дан список чисел который я ввожу с экрана, нужно найти наибольшее количество подряд идущих простых чисел в порядке возрастания (отрицательные тоже считаются) и найти их, если этих рядов несколько, считать тот ряд у которого сумма этих простых чисел больше. вот сам код который я хотел написать
import math
def isPrime(n):
return n != 1 and n != 0 and all(n % t for t in range(2, n))
nums = list(map(int, input().split()))
primes = []
maxcount = count = 0
for num in nums:
if isPrime(num):
count += 1
for i in range(len(nums)-1):
if nums[i] <= nums[i+1]:
primes.append(num)
else:
maxcount = max(count, maxcount)
count = 0
maxcount = max(count, maxcount)
print(maxcount)
print(sum(primes))
сам пытался эти простые числа из списка отправить в массив и найти их сумму, понимаю что глупо, но не могу сравнить элемент списка с последующим вот пример ввода и вывода:
ввод: 20 -7 -7 -2 0 1 3 5 5 10
вывод:
3 13
тут посчиталось что сумма ряда 3 5 5 больше чем -7 -7 -2, из за этого взяли 3 5 5
еще один пример
ввод:
5 -2 -2 10 8
вывод:
2 -4
Ответы (1 шт):
если пользоваться встроенными библиотеками не возбраняется, то можно попробовать такой вариант:
from itertools import groupby
strn = '20 -7 -7 -2 0 1 3 5 5 10'.split()
def isPrime(n):
return n != 1 and n != 0 and all(n % t for t in range(2, n))
primes = [list(g) for k,g in groupby(map(int,strn),key=isPrime) if k]
print(primes) # [[-7, -7, -2], [3, 5, 5]]
res = max(filter(lambda x: x==sorted(x),primes),key=sum,default=[])
print(res) # [3, 5, 5]
print(len(res),sum(res)) # 3 13