TGViewer
Python Portal Python Portal @pythonportal · 50.2K subscribers
Post #5392 8.4K
Расширенный алгоритм Евклида.

1) Что такое расширенный алгоритм Евклида


Для двух целых чисел a и b и их НОД, то есть gcd(a, b), выполняется линейное уравнение с двумя переменными:

a·x + b·y = gcd(a, b) (1)

Расширенный алгоритм Евклида это способ найти одну пару целочисленных решений (x, y), которая удовлетворяет (1).

2) Алгоритм расширенного алгоритма Евклида

Перед тем как перейти к сути, вспомним обычный алгоритм Евклида.

Для двух целых a и b следующими шагами получаем:

gcd(a, b) = rₙ (2)

Сама цепочка делений с остатком:

a = b·q₀ + r₀
b = r₀·q₁ + r₁
r₀ = r₁·q₂ + r₂
...
rₙ₋₂ = rₙ₋₁·qₙ + rₙ
rₙ₋₁ = rₙ·qₙ₊₁

Теперь посмотрим на первую строку:

a = b·q₀ + r₀
r₀ = a − b·q₀

То есть r₀ можно выразить как линейную комбинацию a и b.

Подставим это во вторую строку:

b = r₀·q₁ + r₁
b = (a − b·q₀)·q₁ + r₁
b = a·q₁ − b·q₀·q₁ + r₁
r₁ = −a·q₁ + b·(q₀·q₁ + 1)

Получается, r₁ тоже выражается через a и b.

Если повторять эту операцию, то каждый rᵢ (0 ≤ i ≤ n) можно представить как сумму кратных a и b.
Значит, в конце:

rₙ = k·a + l·b

А из (2) получаем:

k·a + b·l = gcd(a, b) (3)

Это та же форма, что и (1). Сравнивая (1) и (3), получаем:

(x, y) = (k, l)

и эти k и l будут одной из пар целочисленных решений.

3) Реализация расширенного алгоритма Евклида

Опираясь на вышеописанное, реализуем расширенный алгоритм Евклида:

# extended_eucledean.py
def extended_eucledean(a, b):
if b == 0:
return (1, 0)
else:
xd, yd = extended_euclid(b, a % b)
return (yd, xd - a // b * yd)


Очень просто, правда?

Ну всё. Пока. 🛌

👉 @PythonPortal
  • 🔥 19
  • 🤯 9
  • ❤ 8
  • 👍 3
  • 🤣 2
More from @pythonportal
  1. Oct 9, 2026Google выпустила EmbeddingGemma 2. Это первая открытая мультимодальная модель для эмбеддин…
  2. Oct 8, 2026Тестируйте торговые стратегии на основе машинного обучения на исторических рыночных данных…
  3. Oct 8, 2026Смесь CS 1.6 и MW2, которая работает полностью локально в Google Chrome — https://cs.dphn.…
  4. Oct 7, 2026Робототехника — это, по сути, постоянное согласование систем координат. Лидар видит мир в…
  5. Oct 7, 2026Понимание алгоритмов меняет то, как вы пишете код. Этот плейлист учит именно пониманию. Па…
  6. Oct 6, 2026«Разбираемся в трансформерах и механизмах внимания» — краткое математическое введение в ме…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →