Пифагоровы тройки

Прямоугольные треугольники с целыми сторонами — древнее открытие, у которого есть полная формула.

Пифагорова тройка — три натуральных числа $(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$ решений нет (теорема Ферма).
Проверьте себя
1. Какая из троек является пифагоровой?
A$(2, 3, 4)$
B$(5, 12, 13)$
C$(6, 7, 9)$
D$(4, 5, 6)$
2. Что значит, что пифагорова тройка примитивна?
AВсе стороны простые
BУ сторон $a, b, c$ нет общего делителя больше 1
CЭто наименьшая тройка
DВсе стороны нечётные
3. Сколько целочисленных решений у $a^n + b^n = c^n$ при $n \gt 2$?
AБесконечно много
BНи одного (теорема Ферма)
CРовно одно
DСтолько же, сколько при $n=2$