17. Числовые последовательности: #297027
В файле содержится последовательность из $10,000$ целых положительных чисел. Каждое число не превышает $10,000$.
Определите и запишите в ответе сначала количество пар элементов последовательности, у которых сумма нечётна, а произведение делится на $3$, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.
Так как сумма двух чисел должна быть нечётной, одно число пары должно быть чётным, а другое — нечётным.
Кроме того, произведение должно делиться на $3$. Значит, хотя бы один из элементов пары должен делиться на $3$.
Разделим числа последовательности на четыре группы:
- чётные и делящиеся на $3$ — $1666$ чисел;
- чётные и не делящиеся на $3$ — $3377$ чисел;
- нечётные и делящиеся на $3$ — $1680$ чисел;
- нечётные и не делящиеся на $3$ — $3277$ чисел.
Всего нечётных чисел: $1680+3277=4957$.
Подходящие пары можно посчитать двумя непересекающимися случаями.
Если чётное число делится на $3$, то нечётное число может быть любым: $1666\cdot4957=8258362$.
Если чётное число не делится на $3$, то нечётное число обязательно должно делиться на $3$: $3377\cdot1680=5673360$.
Общее количество подходящих пар:
$8258362+5673360=13931722$.
Теперь найдём максимальную сумму.
В последовательности есть число $10000$.
Также в последовательности есть число $9993$.
Число $10000$ чётное, а $9993$ нечётное, поэтому их сумма нечётна: $10000+9993=19993$.
Кроме того, $9993\bmod3=0$, следовательно, произведение этой пары делится на $3$.
Значит, максимальная сумма подходящей пары равна $19993$.
Код на Python
a = [int(x) for x in open('17-29.txt')]
even_3 = [x for x in a if x % 2 == 0 and x % 3 == 0]
even_not_3 = [x for x in a if x % 2 == 0 and x % 3 != 0]
odd_3 = [x for x in a if x % 2 != 0 and x % 3 == 0]
odd_not_3 = [x for x in a if x % 2 != 0 and x % 3 != 0]
count = (
len(even_3) * (len(odd_3) + len(odd_not_3))
+ len(even_not_3) * len(odd_3)
)
max_sum = max(
max(even_3) + max(odd_3 + odd_not_3),
max(even_not_3) + max(odd_3)
)
print(count, max_sum)
Программа выводит:
13931722 19993