Python

Снова не могу решить задачу по питону.

Дано натуральное число c. Напишите функцию is_right(с), которая возвращает True, если существует прямоугольный треугольник с гипотенузой c и целочисленными катетами. (в прямоугольном треугольнике квадрат гипотенузы равен сумме квадратов катетов.)
Руслан
Руслан
410
def is_right(c):
    c2 = c ** 2 # Квадрат вычисляется вне цикла, чтобы каждый раз не считать

    for a in range(1, 1 + int(c * (2 ** 0.5) // 2) ):
        b = (c2 - a * a) ** 0.5
        if b == int(b):
            return True

    return False
________

c * (2 ** 0.5) // 2 — степень ** 0.5, это квадратный корень. Получено отсюда:

Предполагая, что две стороны равны,

a² + a² = c²

2a² = c²
a√2 = c

a = c / √2 = c√2 / 2
____

Т. е. перебирая 1 + 9, 2 + 8, 3 + 7, 4 + 5, 5 + 5 — если дошло сюда и не нашлось, значит и дальше не найдется, всё повторяется в обратном порядке.
Анатолий Христич
Анатолий Христич
62 360
Лучший ответ
import math
def is_right(c):
~~c, e, t = c * c - 1, c * c // 2, 1
~~while c >= e:
~~~~if math.round(math.sqrt(c)) ** 2 == c: return True
~~~~t += 2
~~~~c -= t
~~return False

Последовательно проверяем, что число с * с - 1, c * c - 4, c * c - 9 и т. д. до c * c / 2 является квадратом целого числа. Если такое число найдено - возвращаем True. Если ни одно число не является квадратом - возвращаем False.
АА
Алексей Азов
79 513
Руслан Спасибо. Однако я не рекомендую опытным программистам отвечать на мои вопросы, ведь я совсем недавно изучая Питон, и большинства операторов и модулей я не проходила.
Руслан изучаю