Задание выполняется с использованием прилагаемых файлов
Шестиклассник Коля совсем недавно узнал, что такое НОД и НОК — наибольший общий делитель и наименьшее общее кратное некоторого набора натуральных чисел. Ему так понравилась эта тема, поэтому он решил потренироваться и в случайном порядке начал выписывать на доску от до
натуральных чисел в строчку и попарно начал находить для них НОКи. Его друг Ваня предложил Коле следующую задачу: из каждой строки нужно выбрать один из НОКов, причем так, чтобы их сумма была наибольшей, а также кратна
или
.
В ответе укажите два числа: сначала искомое значение для файла А, затем для файла B.
Формат входных данных
Первая строка входных данных содержит число n — количество строк, . Следующие
строк содержат натуральное число
, обозначающее количество чисел в строке, затем
натуральных чисел в этой строке.
Формат выходных данных
Программа должна вывести целое число — максимальную сумму, кратную или
.
Пример:
Ответом для примера будет:
Рассмотрим пример из условия. Для указанных входных данных значения НОК для первой строки — ; для второй строки —
для третьей группы —
, для четвёртой группы —
Значением искомой суммы должно быть число
.
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
def lcm(a, b):
return (a*b)//gcd(a, b)
def h(x, m, m_new):
for j in range(88):
ost = (m[j]+x) % 88
if (m[j]+x > m_new[ost]):
m_new[ost] = m[j]+x
f = open(’Задание 27 B.txt’)
m = [-1000000]*88
m[0] = 0
n = int(f.readline())
for i in range(n):
a = [int(p) for p in f.readline().split()]
k = a[0]
b = []
for i in range(1, len(a)):
for j in range(i+1, len(a)):
b.append(lcm(a[i], a[j]))
m_new = [-10000000]*88
for x in b:
h(x, m, m_new)
for j in range(88):
m[j] = m_new[j]
ans = -10000000
for r in range(88):
if r % 8 == 0 or r % 11 == 0:
ans = max(ans, m[r])
print(ans)