Задание выполняется с использованием прилагаемых файлов
Имеется набор данных, состоящий из положительных целых чисел или
.
Необходимо расположить числа в таком порядке, чтобы максимизировать число сумм на всех префиксах последовательности, которые являются простыми числами. Программа должна напечатать одно число — максимальное количество префиксных сумм, которые являются простыми числами.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число — количество чисел. Каждая из следующих
строк содержит натуральное число
или
.
Пример входного файла:
При таких исходных данных оптимально расположить числа следующим образом: или
. Тогда префиксные суммы будут равны
или
соответственно. Ответ:
.
В ответе укажите два числа: сначала значение для файла А, затем для файла B.
def is_prime(k):
if k == 1:
return False
for j in range(2, int(k ** 0.5) + 1):
if k % j == 0:
return False
return True
f = open(’Задание_27_B__loof.txt’)
n = int(f.readline())
ones, twos = 0, 0
for i in range(n):
ones += (int(f.readline()) == 1)
twos = n - ones
# Если не существует единиц или двоек
if not ones or not twos:
a = [1] * ones + [2] * twos
else:
a = [2, 1] + [2] * (twos - 1) + [1] * (ones - 1)
# Простое число - нечетное. Первое простое - это 2. Далее 3, 5, 7, 11 и тд - все они нечетные.
# Но лучшего расположения мы добьемся при скачках сначала по нечетным, а потом все остальное.
ans = 0
s = 0
for i in range(len(a)):
s += a[i]
if is_prime(s):
ans += 1
print(ans)