Как решить задачу, и возможно ли решить ее на Python 3?

Пусть x,y,z - натуральные числа. Известно, что произведение xyz=14745600. На какую максимальную степень двойки может делиться x^2+y^2+z^2 ?


Ответы (1 шт):

Автор решения: Harry

Разложим 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, и никакого Питона :)

→ Ссылка