Евклидов алгоритм - Euclidean algorithm
В математика, то Евклидов алгоритм,[примечание 1] или же Алгоритм Евклида, является эффективным методом вычисления наибольший общий делитель (НОД) двух целых чисел (чисел), наибольшее число, которое делит их оба без остаток. Назван в честь древнегреческого математик Евклид, который впервые описал это в его Элементы (ок. 300 г. до н. э.). Это пример алгоритм, пошаговая процедура для выполнения вычислений в соответствии с четко определенными правилами, и это один из старейших широко используемых алгоритмов. Его можно использовать для уменьшения фракции к их самая простая форма, и является частью многих других теоретико-числовых и криптографических вычислений.
Алгоритм Евклида основан на том принципе, что наибольший общий делитель двух чисел не меняется, если большее число заменяется его разностью с меньшим числом. Например, 21 - это НОД 252 и 105 (как 252 = 21 × 12 и 105 = 21 × 5), и то же число 21 также является НОД 105 и 252 - 105 = 147. Поскольку эта замена уменьшает большее из двух чисел, повторение этого процесса дает последовательно меньшие пары чисел, пока два числа не станут равными. Когда это происходит, они являются НОД исходных двух чисел. К поменять шаги или используя расширенный алгоритм Евклида, НОД можно выразить как линейная комбинация двух исходных чисел, то есть суммы двух чисел, каждое из которых умножено на целое число (Например, 21 = 5 × 105 + (−2) × 252). Тот факт, что НОД всегда можно выразить таким образом, известен как Личность Безу.
Версия алгоритма Евклида, описанная выше (и Евклидом), может предпринять много шагов вычитания, чтобы найти НОД, когда одно из заданных чисел намного больше другого. Более эффективная версия алгоритма сокращает эти шаги, вместо этого заменяя большее из двух чисел его остатком при делении на меньшее из двух (в этой версии алгоритм останавливается при достижении нулевого остатка). Благодаря этому усовершенствованию алгоритм никогда не требует больше шагов, чем пятикратное количество цифр (основание 10) меньшего целого числа. Это было доказано Габриэль Ламе в 1844 году и знаменует собой начало теория сложности вычислений. Дополнительные методы повышения эффективности алгоритма были разработаны в ХХ веке.
Алгоритм Евклида имеет множество теоретических и практических приложений. Используется для уменьшения фракции к их самая простая форма и для выполнения разделение в модульная арифметика. Вычисления с использованием этого алгоритма являются частью криптографические протоколы которые используются для защиты Интернет коммуникации и методы взлома этих криптосистем путем факторинг больших составных чисел. Алгоритм Евклида можно использовать для решения Диофантовы уравнения, например, поиск чисел, удовлетворяющих множественным сравнениям в соответствии с Китайская теорема об остатках, строить непрерывные дроби, и найти точные рациональные приближения к действительным числам. Наконец, его можно использовать в качестве основного инструмента для доказательства теорем в теория чисел Такие как Теорема Лагранжа о четырех квадратах и единственность простых факторизаций. Первоначальный алгоритм был описан только для натуральных чисел и геометрической длины (действительных чисел), но алгоритм был обобщен в 19 веке для других типов чисел, таких как Гауссовские целые числа и многочлены одной переменной. Это привело к современному абстрактная алгебраическая такие понятия, как Евклидовы области.
Фон: наибольший общий делитель
Алгоритм Евклида вычисляет наибольший общий делитель (НОД) двух натуральные числа а и б. Наибольший общий делитель грамм это наибольшее натуральное число, которое делит оба а и б не оставляя остатка. Синонимы к GCD включают наибольший общий делитель (GCF), наивысший общий фактор (HCF), старший общий делитель (HCD), а наибольшая общая мера (GCM). Наибольший общий делитель часто записывается как gcd (а, б) или, проще, как (а, б),[1] хотя последнее обозначение неоднозначно, оно также используется для таких понятий, как идеальный в кольцо целых чисел, который тесно связан с GCD.
Если gcd (а, б) = 1, то а и б как говорят совмещать (или относительно простые).[2] Это свойство не означает, что а или же б сами простые числа.[3] Например, ни 6, ни 35 не являются простыми числами, так как они оба имеют два простых множителя: 6 = 2 × 3 и 35 = 5 × 7. Тем не менее, 6 и 35 взаимно просты. Никакое натуральное число, кроме 1, не делит 6 и 35, так как у них нет общих простых делителей.
Позволять грамм = gcd (а, б). С а и б оба кратны грамм, их можно написать а = мг и б = нг, и нет большего числа грамм > грамм для чего это правда. Натуральные числа м и п должны быть взаимно простыми, поскольку любой общий фактор может быть исключен из м и п сделать грамм больше. Таким образом, любое другое число c что разделяет оба а и б должен также разделить грамм. Наибольший общий делитель грамм из а и б является единственным (положительным) общим делителем числа а и б который делится на любой другой общий делитель c.[4]
НОД можно визуализировать следующим образом.[5] Рассмотрим прямоугольную область а к б, и любой общий делитель c что разделяет оба а и б точно. Стороны прямоугольника можно разделить на отрезки длины c, который делит прямоугольник на сетку квадратов со стороной c. Наибольший общий делитель грамм это наибольшее значение c для которых это возможно. Для иллюстрации прямоугольную область 24 на 60 можно разделить на сетку из: квадратов 1 на 1, квадратов 2 на 2, квадратов 3 на 3, квадратов 4 на 4, 6 на -6 квадратов или 12 на 12 квадратов. Следовательно, 12 - это наибольший общий делитель 24 и 60. Прямоугольную область 24 на 60 можно разделить на сетку из квадратов 12 на 12, с двумя квадратами вдоль одного края (24/12 = 2) и пятью квадраты по другой (60/12 = 5).
НОД двух чисел а и б представляет собой произведение простых множителей, общих для двух чисел, где один и тот же простой множитель может использоваться несколько раз, но только до тех пор, пока произведение этих множителей делит оба а и б.[6] Например, поскольку 1386 можно разложить на 2 × 3 × 3 × 7 × 11, а 3213 можно разложить на 3 × 3 × 3 × 7 × 17, наибольший общий делитель 1386 и 3213 равен 63 = 3 × 3 × 7, произведение их общих простых факторов. Если два числа не имеют общих простых делителей, их наибольший общий делитель равен 1 (получен здесь как пример пустой продукт ), другими словами, они взаимно просты. Ключевым преимуществом алгоритма Евклида является то, что он может эффективно находить НОД без вычисления простых множителей.[7][8] Факторизация больших целых чисел считается вычислительно очень сложной задачей, а безопасность многих широко используемых криптографические протоколы основано на его невозможности.[9]
Другое определение НОД полезно в продвинутой математике, особенно в теория колец.[10] Наибольший общий делитель грамм двух ненулевых чисел а и б также является их наименьшей положительной целочисленной линейной комбинацией, то есть наименьшим положительным числом вида ua + vb куда ты и v целые числа. Множество всех целых линейных комбинаций а и б фактически совпадает с набором всех кратных грамм (мг, куда м является целым числом). На современном математическом языке идеальный создано а и б идеал, порожденныйграмм один (идеал, порожденный одним элементом, называется главный идеал, а все идеалы целых чисел являются главными идеалами). Некоторые свойства НОД на самом деле легче увидеть с помощью этого описания, например тот факт, что любой общий делитель а и б также делит НОД (он делит оба члена ua + vb). Эквивалентность этого определения GCD другим определениям описывается ниже.
НОД трех или более чисел равен произведению простых множителей, общих для всех чисел,[11] но его также можно вычислить, многократно взяв НОД пар чисел.[12] Например,
- gcd (а, б, c) = gcd (а, gcd (б, c)) = gcd (gcd (а, б), c) = gcd (gcd (а, c), б).
Таким образом, алгоритма Евклида, который вычисляет НОД двух целых чисел, достаточно для вычисления НОД произвольного числа целых чисел.
Описание
Процедура
Алгоритм Евклида состоит из ряда шагов, так что выходные данные каждого шага используются в качестве входных данных для следующего. Позволять k быть целым числом, которое считает шаги алгоритма, начиная с нуля. Таким образом, начальный шаг соответствует k = 0, следующий шаг соответствует k = 1 и так далее.
Каждый шаг начинается с двух неотрицательных остатков рk−1 и рk−2. Поскольку алгоритм гарантирует, что остатки неуклонно уменьшаются с каждым шагом, рk−1 меньше, чем его предшественник рk−2. Цель k-й шаг - найти частное qk и остаток рk которые удовлетворяют уравнению
и что 0 ≤ рk < рk−1. Другими словами, кратные меньшему числу рk−1 вычитаются из большего числа рk−2 до остатка рk меньше чем рk−1.
На начальном этапе (k = 0) остатки р−2 и р−1 равный а и б, числа, для которых ищется НОД. На следующем шаге (k = 1) остатки равны б а остальное р0 начального шага и т. д. Таким образом, алгоритм можно записать в виде последовательности уравнений
Если а меньше чем б, первый шаг алгоритма меняет местами числа. Например, если а < б, начальное частное q0 равен нулю, а остаток р0 является а. Таким образом, рk меньше, чем его предшественник рk−1 для всех k ≥ 0.
Поскольку остатки уменьшаются с каждым шагом, но никогда не могут быть отрицательными, остаток рN должен в конечном итоге равняться нулю, после чего алгоритм останавливается.[13] Последний ненулевой остаток рN−1 является наибольшим общим делителем а и б. Номер N не может быть бесконечным, потому что есть только конечное число неотрицательных целых чисел между начальным остатком р0 и ноль.
Доказательство действительности
Справедливость алгоритма Евклида может быть доказана двухэтапным аргументом.[14] На первом шаге последний ненулевой остаток рN−1 показано деление обоих а и б. Поскольку это общий делитель, он должен быть меньше или равен наибольшему общему делителю. грамм. На втором шаге показано, что любой общий делитель числа а и б, включая грамм, должен разделить рN−1; следовательно, грамм должно быть меньше или равно рN−1. Эти два вывода несовместимы, если рN−1 = грамм.
Чтобы продемонстрировать, что рN−1 разделяет оба а и б (первый шаг), рN−1 делит своего предшественника рN−2
- рN−2 = qN рN−1
так как последний остаток рN равно нулю. рN−1 также делит своего следующего предшественника рN−3
- рN−3 = qN−1 рN−2 + рN−1
потому что он делит оба члена в правой части уравнения. Повторяя тот же аргумент, рN−1 делит все предыдущие остатки, включая а и б. Ни один из предыдущих остатков рN−2, рN−3и т. д. разделить а и б, поскольку они оставляют остаток. С рN−1 является общим делителем а и б, рN−1 ≤ грамм.
На втором этапе любое натуральное число c что разделяет оба а и б (другими словами, любой общий делитель а и б) делит остатки рk. По определению, а и б можно записать как кратное c : а = MC и б = NC, куда м и п натуральные числа. Следовательно, c делит начальный остаток р0, поскольку р0 = а − q0б = MC − q0NC = (м − q0п)c. Аналогичный аргумент показывает, что c также делит последующие остатки р1, р2и т. д. Следовательно, наибольший общий делитель грамм должен разделить рN−1, откуда следует, что грамм ≤ рN−1. Поскольку первая часть аргумента показала обратное (рN−1 ≤ грамм), следует, что грамм = рN−1. Таким образом, грамм является наибольшим общим делителем всех последующих пар:[15][16]
- грамм = gcd (а, б) = gcd (б, р0) = gcd (р0, р1) =… = НОД (рN−2, рN−1) = рN−1.
Пример работы
Для иллюстрации можно использовать алгоритм Евклида, чтобы найти наибольший общий делитель а = 1071 и б = 462. Для начала, кратные 462 вычитаются из 1071, пока остаток не станет меньше 462. Два таких кратных можно вычесть (q0 = 2), оставляя остаток от 147:
- 1071 = 2 × 462 + 147.
Затем из 462 вычитаются числа, кратные 147, пока остаток не станет меньше 147. Можно вычесть три кратных (q1 = 3), оставив остаток от 21:
- 462 = 3 × 147 + 21.
Затем из 147 вычитаются числа, кратные 21, пока остаток не станет меньше 21. Можно вычесть семь кратных (q2 = 7), не оставляя остатка:
- 147 = 7 × 21 + 0.
Поскольку последний остаток равен нулю, алгоритм заканчивается 21 как наибольший общий делитель 1071 и 462. Это согласуется с НОД (1071, 462), найденным путем разложения на простые множители. над. В табличной форме шаги следующие:
Шаг k | Уравнение | Частное и остаток |
---|---|---|
0 | 1071 = q0 462 + р0 | q0 = 2 и р0 = 147 |
1 | 462 = q1 147 + р1 | q1 = 3 и р1 = 21 |
2 | 147 = q2 21 + р2 | q2 = 7 и р2 = 0; алгоритм заканчивается |
Визуализация
Алгоритм Евклида можно представить себе в терминах мозаичной аналогии, приведенной выше для наибольшего общего делителя.[17] Предположим, что мы хотим покрыть а-к-б прямоугольник с квадратными плитками ровно, где а является большим из двух чисел. Сначала мы пытаемся выложить прямоугольник, используя б-к-б квадратная плитка; однако это оставляет р0-к-б остаточный прямоугольник без элементов, где р0 < б. Затем мы пытаемся замостить остаточный прямоугольник с помощью р0-к-р0 квадратная плитка. Остается второй остаточный прямоугольник р1-к-р0, который мы пытаемся выложить плиткой, используя р1-к-р1 квадратная плитка и т. д. Последовательность завершается, когда нет остаточного прямоугольника, то есть когда квадратные плитки точно покрывают предыдущий остаточный прямоугольник. Длина сторон самой маленькой квадратной плитки - это НОД размеров исходного прямоугольника. Например, самая маленькая квадратная плитка на соседнем рисунке имеет размер 21 на 21 (показано красным), а 21 - это НОД 1071 и 462, размеры исходного прямоугольника (показаны зеленым).
Евклидово деление
На каждом шагу k, алгоритм Евклида вычисляет частное qk и остальное рk из двух номеров рk−1 и рk−2
- рk−2 = qk рk−1 + рk
где рk неотрицательно и строго меньше, чем абсолютная величина из рk−1. Теорема, лежащая в основе определения Евклидово деление гарантирует, что такое частное и остаток всегда существуют и уникальны.[18]
В исходной версии алгоритма Евклида частное и остаток находятся путем повторного вычитания; то есть, рk−1 вычитается из рk−2 повторно до остатка рk меньше чем рk−1. После того рk и рk−1 обмениваются, и процесс повторяется. Евклидово деление сокращает все шаги между двумя обменами до одного шага, что, таким образом, более эффективно. Более того, частные не нужны, поэтому можно заменить евклидово деление на операция по модулю, что дает только остаток. Таким образом, итерация алгоритма Евклида становится просто
- рk = рk−2 мод рk−1.
Реализации
Реализации алгоритма могут быть выражены в псевдокод. Например, версия на основе разделения может быть запрограммированный в качестве[19]
функция gcd (a, b) пока b ≠ 0 t: = b b: = a мод б а: = т возвращаться а
В начале kй итерации переменная б держит последний остаток рk−1, а переменная а держит своего предшественника, рk−2. Шаг б := а мод б эквивалентно приведенной выше формуле рекурсии рk ≡ рk−2 мод рk−1. В временная переменная т имеет ценность рk−1 а следующий остаток рk рассчитывается. В конце итерации цикла переменная б держит остаток рk, а переменная а держит своего предшественника, рk−1.
В версии на основе вычитания, которая была исходной версией Евклида, вычисление остатка (б: = а мод б
) заменяется повторным вычитанием.[20] В отличие от версии на основе деления, которая работает с произвольными целыми числами в качестве ввода, версия на основе вычитания предполагает, что ввод состоит из положительных целых чисел и останавливается, когда а = б:
функция gcd (a, b) пока а ≠ б если а> б а: = а - б еще б: = б - а возвращаться а
Переменные а и б поочередно удерживая предыдущие остатки рk−1 и рk−2. Предположить, что а больше чем б в начале итерации; тогда а равно рk−2, поскольку рk−2 > рk−1. Во время итерации цикла а уменьшается кратно предыдущему остатку б до того как а меньше чем б. потом а следующий остаток рk. потом б уменьшается кратно а пока он снова не станет меньше, чем а, давая следующий остаток рk+1, и так далее.
Рекурсивная версия[21] основан на равенстве НОД последовательных остатков и условия остановки НОД (рN−1, 0) = рN−1.
функция gcd (a, b) если б = 0 возвращаться а еще возвращаться gcd (b, a мод б)
Например, НОД (1071, 462) вычисляется из эквивалентного НОД (462, 1071 mod 462) = НОД (462, 147). Последний НОД вычисляется из НОД (147, 462 mod 147) = НОД (147, 21), который, в свою очередь, вычисляется из НОД (21, 147 mod 21) = НОД (21, 0) = 21.
Метод наименьших абсолютных остатков
В другой версии алгоритма Евклида частное на каждом шаге увеличивается на единицу, если результирующий отрицательный остаток меньше по величине, чем типичный положительный остаток.[22][23] Ранее уравнение
- рk−2 = qk рk−1 + рk
предположил, что |рk−1| > рk > 0. Однако альтернативный отрицательный остаток еk можно вычислить:
- рk−2 = (qk + 1) рk−1 + еk
если рk−1 > 0 или же
- рk−2 = (qk − 1) рk−1 + еk
если рk−1 < 0.
Если рk заменяется на еk. когда |еk| < |рk|, то получается такой вариант алгоритма Евклида, что
- |рk| ≤ |рk−1| / 2
на каждом шагу.
Леопольд Кронекер показал, что эта версия требует наименьшего количества шагов по сравнению с любой версией алгоритма Евклида.[22][23] В более общем плане было доказано, что для каждого входного числа а и б, количество шагов минимально тогда и только тогда, когда qk выбирается для того, чтобы куда это Золотое сечение.[24]
Историческое развитие
Алгоритм Евклида - один из самых старых широко используемых алгоритмов.[25] Он появляется в Евклида Элементы (ок. 300 г. до н.э.), особенно в Книге 7 (Предложения 1–2) и Книге 10 (Предложения 2–3). В Книге 7 алгоритм сформулирован для целых чисел, тогда как в Книге 10 он сформулирован для длин отрезков прямой. (В современном использовании можно сказать, что он был сформулирован для действительные числа. Но длины, площади и объемы, представленные в современном обиходе действительными числами, не измеряются в одних и тех же единицах, и нет естественных единиц длины, площади или объема; понятие действительных чисел в то время было неизвестно.) Последний алгоритм является геометрическим. НОД двух длин а и б соответствует наибольшей длине грамм это меры а и б равномерно; другими словами, длина а и б оба целые числа кратные длины грамм.
Вероятно, алгоритм не был обнаружен Евклид, который обобщил результаты более ранних математиков в своей Элементы.[26][27] Математик и историк Б. Л. ван дер Варден предполагает, что Книга VII происходит из учебника по теория чисел написано математиками в школе Пифагор.[28] Алгоритм, вероятно, был известен Евдокс Книдский (около 375 г. до н.э.).[25][29] Алгоритм может даже предшествовать Евдоксу,[30][31] судя по использованию технического термина ἀνθυφαίρεσις (ангиферез, взаимное вычитание) в работах Евклида и Аристотеля.[32]
Спустя столетия алгоритм Евклида был независимо открыт как в Индии, так и в Китае.[33] в первую очередь решить Диофантовы уравнения возникшие в астрономии и создании точных календарей. В конце V века индийский математик и астроном Арьябхата описал алгоритм как «измельчитель»,[34] возможно, из-за его эффективности при решении диофантовых уравнений.[35] Хотя частный случай Китайская теорема об остатках уже было описано в китайской книге Сунзи Суаньцзин,[36] общее решение было опубликовано Цинь Цзюшао в его книге 1247 г. Шушу Цзючжан (數 書 九章 Математический трактат в девяти разделах ).[37] Впервые был описан алгоритм Евклида. численно и популяризован в Европе во втором издании Баше Problèmes plaisants et délectables (Приятные и приятные проблемы, 1624).[34] В Европе он также использовался для решения диофантовых уравнений и при разработке непрерывные дроби. В расширенный алгоритм Евклида был опубликован английским математиком Николас Сондерсон,[38] кто приписал это Роджер Котс как метод эффективного вычисления непрерывных дробей.[39]
В 19 веке алгоритм Евклида привел к развитию новых систем счисления, таких как Гауссовские целые числа и Целые числа Эйзенштейна. В 1815 г. Карл Гаусс использовали алгоритм Евклида, чтобы продемонстрировать уникальную факторизацию Гауссовские целые числа, хотя его работа была впервые опубликована в 1832 году.[40] Гаусс упомянул алгоритм в своем Disquisitiones Arithmeticae (опубликовано в 1801 г.), но только как метод для непрерывные дроби.[33] Питер Густав Лежен Дирихле кажется, был первым, кто описал алгоритм Евклида как основу большей части теории чисел.[41] Лежен Дирихле отметил, что многие результаты теории чисел, такие как уникальная факторизация, будут верны для любой другой системы чисел, к которой можно применить алгоритм Евклида.[42] Лекции Лежена Дирихле по теории чисел редактировал и дополнял Ричард Дедекинд, который использовал алгоритм Евклида для изучения алгебраические целые числа, новый общий тип номера. Например, Дедекинд первым доказал Теорема Ферма о двух квадратах используя уникальную факторизацию гауссовских целых чисел.[43] Дедекинд также определил понятие Евклидова область, система счисления, в которой может быть определена обобщенная версия алгоритма Евклида (как описано ниже ). В последние десятилетия XIX века алгоритм Евклида постепенно уступил место более общей теории Дедекинда. идеалы.[44]
«[Алгоритм Евклида] - дедушка всех алгоритмов, потому что это самый старый нетривиальный алгоритм, сохранившийся до наших дней». |
Дональд Кнут, Искусство программирования, Vol. 2: получисловые алгоритмы, 2-е издание (1981), стр. 318. |
Другие приложения алгоритма Евклида были разработаны в 19 веке. В 1829 г. Чарльз Штурм показал, что алгоритм был полезен в Штурмовая цепь метод подсчета действительных корней многочленов в любом заданном интервале.[45]
Алгоритм Евклида был первым алгоритм целочисленного отношения, который представляет собой метод нахождения целочисленных отношений между соизмеримыми действительными числами. Несколько романов алгоритмы целочисленных отношений были разработаны, например, алгоритм Геламан Фергюсон и Р.В. Форкэйд (1979)[46] и LLL алгоритм.[47][48]
В 1969 году Коул и Дэви разработали игру для двух игроков, основанную на алгоритме Евклида, под названием Игра Евклида,[49] который имеет оптимальную стратегию.[50] Игроки начинают с двумя стопками а и б камни. Игроки по очереди снимают м кратно меньшей стопке большей. Таким образом, если две стопки состоят из Икс и у камни, где Икс больше чем у, следующий игрок может уменьшить большую стопку из Икс камни в Икс − мой камни, если последнее является целым неотрицательным числом. Побеждает тот игрок, который первым уменьшит одну стопку камней до нуля.[51][52]
Математические приложения
Личность Безу
Личность Безу утверждает, что наибольший общий делитель грамм двух целых чисел а и б можно представить как линейную сумму двух исходных чисел а и б.[53] Другими словами, всегда можно найти целые числа s и т такой, что грамм = са + tb.[54][55]
Целые числа s и т можно рассчитать из частных q0, q1и т.д., изменив порядок уравнений в алгоритме Евклида.[56] Начиная с предпоследнего уравнения, грамм можно выразить через частное qN−1 и два предыдущих остатка, рN−2 и рN−3:
- грамм = рN−1 = рN−3 − qN−1 рN−2 .
Эти два остатка могут быть аналогичным образом выражены через их частные и предшествующие остатки,
- рN−2 = рN−4 − qN−2 рN−3 и
- рN−3 = рN−5 − qN−3 рN−4 .
Подставляя эти формулы для рN−2 и рN−3 в первое уравнение дает грамм как линейную сумму остатков рN−4 и рN−5. Процесс замены остатков формулами с участием их предшественников может быть продолжен до тех пор, пока исходные числа а и б достигаются:
- р2 = р0 − q2 р1
- р1 = б − q1 р0
- р0 = а − q0 б.
После всего остального р0, р1и т. д., окончательное уравнение выражает грамм как линейную сумму а и б: грамм = са + tb. Личность Безу, и, следовательно, предыдущий алгоритм, оба могут быть обобщены в контексте Евклидовы области.
Тождество Безу дает еще одно определение наибольшего общего делителя грамм двух чисел а и б.[10] Рассмотрим набор всех чисел ua + vb, куда ты и v - любые два целых числа. С а и б оба делятся на грамм, каждое число в наборе делится на грамм. Другими словами, каждое число в наборе является целым числом, кратным грамм. Это верно для любого общего делителя а и б. Однако, в отличие от других общих делителей, наибольший общий делитель является членом множества; личности Безу, выбрав ты = s и v = т дает грамм. Меньший общий делитель не может быть членом множества, так как каждый член множества должен делиться на грамм. И наоборот, любое кратное м из грамм можно получить, выбрав ты = РС и v = мт, куда s и т являются целыми числами личности Безу. Это можно увидеть, умножив личность Безу на м,
- мг = мса + mtb.
Следовательно, набор всех чисел ua + vb эквивалентен множеству кратных м из грамм. Другими словами, множество всех возможных сумм целых кратных двух чисел (а и б) эквивалентен множеству кратных gcd (а, б). Говорят, что НОД является генератором идеальный из а и б. Это определение НОД привело к современному абстрактная алгебраическая концепции главный идеал (идеал, порожденный одним элементом) и главная идеальная область (а домен в котором каждый идеал является главным идеалом).
С помощью этого результата можно решить некоторые проблемы.[57] Например, рассмотрим две мерные чашки объема. а и б. Добавляя / вычитая ты кратные первой чашки и v кратные второй чашки, любой объем ua + vb можно измерить. Все эти объемы кратны грамм = gcd (а, б).
Расширенный алгоритм Евклида
Целые числа s и т тождества Безу можно эффективно вычислить с помощью расширенный алгоритм Евклида. Это расширение добавляет к алгоритму Евклида два рекурсивных уравнения[58]
- sk = sk−2 − qksk−1
- тk = тk−2 − qkтk−1
с начальными значениями
- s−2 = 1, т−2 = 0
- s−1 = 0, т−1 = 1.
Используя эту рекурсию, целые числа Безу s и т даны s = sN и т = тN, куда N + 1 шаг, на котором алгоритм завершается с рN + 1 = 0.
Справедливость этого подхода можно показать по индукции. Предположим, что формула рекурсии верна до шага k - 1 алгоритм; другими словами, предположим, что
- рj = sj а + тj б
для всех j меньше, чем k. В k-й шаг алгоритма дает уравнение
- рk = рk−2 − qkрk−1.
Поскольку формула рекурсии считается правильной для рk−2 и рk−1, они могут быть выражены через соответствующие s и т переменные
- рk = (sk−2 а + тk−2 б) − qk(sk−1 а + тk−1 б).
Преобразование этого уравнения приводит к формуле рекурсии для шага k, как требуется
- рk = sk а + тk б = (sk−2 − qksk−1) а + (тk−2 − qkтk−1) б.
Матричный метод
Целые числа s и т также можно найти с помощью эквивалента матрица метод.[59] Последовательность уравнений алгоритма Евклида
может быть записано как произведение матриц частных 2 на 2, умноженных на двумерный вектор остатка