Как решить задачу, и возможно ли решить ее на Python 3?
Пусть x,y,z - натуральные числа. Известно, что произведение xyz=14745600. На какую максимальную степень двойки может делиться x^2+y^2+z^2 ?
Ответы (1 шт):
Разложим 14745600 на простые множители, получим 2^16*3^2*5^2
Уже понятно, что наибольшую степень 2 мы получим, если каждое - x,y,z - сделаем кратным по 2^5. x=2^5*k, y=2^5*l, z=2^5*m. Получаем x^2+y^2+z^2 = 2^10*(k^2+l^2+m^2)
Где klm = 2*9*25=450. Теперь можно и небольшим перебором проверить все k^2+l^2+m^2 и посмотреть, на какую степень 2 они делятся.
Это уже совсем просто - типа
max2 = 0
for k in range(1,22):
if 450%k != 0: continue
for l in range(k+1,450//k+1):
if 450//k%l != 0: continue
m = 450//k//l
m = m*m+k*k+l*l
cnt = 0
while(m%2 == 0):
cnt = cnt + 1
m = m//2
if max2 < cnt: max2=cnt
print(max2)
Наверняка можно и умнее :), но уже этот перебор показывает, что максимум, на что делится k^2+l^2+m^2 - это на 2 в первой степени. А потому - максимальная степень - 2^11...
Но это же можно показать и руками - понятно, что в одно из чисел входит 2, два остальных - нечетны. Т.е. числа имеют вид k = 2*(2a+1), l = 2b+1, m = 2c+1. Возводя в квадраты и суммируя, находим
4*(4a^2+4a+1)+(4b^2+4b+1)+4c^2+4c+1 = 4*(....)+2 - т.е. делиться на 4 это число не может, только на 2, а значит - вот еще одна степень 2.
Итог - 10+1 = 11, и никакого Питона :)