344
правки
Изменения
→Расширенный алгоритм Евклида
===Расширенный алгоритм Евклида===
В стандартном алгоритме, мы использовали следующее свойство: <tex>\gcd(a, b) = \gcd(b, a \bmod b)</tex>. Воспользуемся им для того, чтобы решить следующую задачу: найти <tex>x</tex> и <tex>y</tex> такие, что <tex>ax a \cdot x + by b \cdot y = \gcd(a, b)</tex>. Пусть мы нашли пару <tex>x_1, y_1: \: bx_1 + (a \bmod b)\cdot y_1 = \gcd(a, b)</tex>.Очевидно, что <tex>a \bmod b = a - \lfloor \frac{a}{b}\rfloor \cdot b</tex>. Получаем: <tex>bx_1 + (a \bmod b)\cdot y_1 = b \cdot x_1 + \left(a - \lfloor \frac{a}{b}\rfloor b\right)\cdot y_1 = b\left(x_1 - \lfloor \frac{a}{b}\rfloor y_1\right) + a \cdot y_1</tex>. Следовательно, приходим к расширенному алгоритму Евклида:
<font color="green">// Алгоритм возвращает тройку <tex>\gcd, x, y</tex></font>
'''function''' extendedGcd(a, b) :