Пифагоровы тройки
Прямоугольные треугольники с целыми сторонами — древнее открытие, у которого есть полная формула.
Пифагорова тройка — три натуральных числа $(a, b, c)$, для которых $a^2 + b^2 = c^2$.
Теорема Пифагора связывает катеты и гипотенузу: $a^2 + b^2 = c^2$. Обычно стороны иррациональны, но иногда все три оказываются целыми — как у знаменитого треугольника $3, 4, 5$. Такие тройки знали ещё вавилоняне за тысячу лет до Пифагора.
Примитивные тройки и формула Евклида
Тройку называют примитивной, если у $a, b, c$ нет общего делителя (иначе её можно сократить: $6,8,10$ — это удвоенная $3,4,5$). Евклид дал формулу, порождающую все примитивные тройки. Берём взаимно простые $m \gt n \gt 0$ разной чётности и полагаем
$$a = m^2 - n^2, \quad b = 2mn, \quad c = m^2 + n^2.$$
Тогда $a^2 + b^2 = c^2$ автоматически. Например, $m=2, n=1$ дают $(3, 4, 5)$; $m=3, n=2$ дают $(5, 12, 13)$.
Находим тройки перебором
from math import gcd, isqrt
triples = []
for a in range(1, 30):
for b in range(a, 30):
c2 = a * a + b * b
c = isqrt(c2)
if c * c == c2 and c < 30 and gcd(gcd(a, b), c) == 1:
triples.append((a, b, c))
print("Примитивные тройки со сторонами до 30:")
for t in triples:
a, b, c = t
print(f" {t}: {a}^2 + {b}^2 = {a*a + b*b} = {c}^2")
Вывод:
Примитивные тройки со сторонами до 30: (3, 4, 5): 3^2 + 4^2 = 25 = 5^2 (5, 12, 13): 5^2 + 12^2 = 169 = 13^2 (7, 24, 25): 7^2 + 24^2 = 625 = 25^2 (8, 15, 17): 8^2 + 15^2 = 289 = 17^2 (20, 21, 29): 20^2 + 21^2 = 841 = 29^2
Как работает под капотом
Функция isqrt даёт целую часть квадратного корня без ошибок плавающей точки; мы проверяем, что $c^2$ — точный квадрат, сравнивая c*c == c2. Условие gcd(gcd(a, b), c) == 1 оставляет лишь примитивные тройки. Любопытно, что для степеней выше второй таких целочисленных решений нет вовсе: уравнение $a^n + b^n = c^n$ при $n \gt 2$ не имеет решений в натуральных числах — это знаменитая Великая теорема Ферма, доказанная Эндрю Уайлсом лишь в 1994 году. Так что «пифагоровость» — особенность именно квадратов.
Частые ошибки
Не проверяйте равенство квадратов через c2 ** 0.5 в float — для больших чисел корень округлится неверно; берите isqrt. Не считайте $6, 8, 10$ новой тройкой — это лишь масштабированная $3,4,5$. И помните, что формула Евклида требует $m$ и $n$ разной чётности и взаимной простоты, иначе тройка не будет примитивной.
Итог
- Пифагорова тройка: $a^2 + b^2 = c^2$ в целых числах.
- Примитивная — без общего делителя сторон.
- Формула Евклида порождает все примитивные тройки.
- Для степеней $n \gt 2$ решений нет (теорема Ферма).