В математике алгоритм Евклида [примечание 1] или алгоритм Евклида — это эффективный метод вычисления наибольшего общего делителя (НОД) двух целых чисел (чисел), наибольшего числа, которое делит их оба без остатка . Он назван в честь древнегреческого математика Евклида , который впервые описал его в своих «Началах» ( ок. 300 г. до н. э. ). Это пример алгоритма , пошаговой процедуры для выполнения вычисления в соответствии с четко определенными правилами, и один из старейших алгоритмов, находящихся в общем использовании. Он может быть использован для приведения дробей к их простейшей форме и является частью многих других теоретико-числовых и криптографических вычислений.
Алгоритм Евклида основан на принципе, что наибольший общий делитель двух чисел не изменится, если большее число заменить его разностью с меньшим числом. Например, 21 является НОД 252 и 105 (так как 252 = 21 × 12 и 105 = 21 × 5) , и то же самое число 21 также является НОД 105 и 252 − 105 = 147. Поскольку эта замена уменьшает большее из двух чисел, повторение этого процесса дает последовательно меньшие пары чисел, пока два числа не станут равными. Когда это происходит, это число является НОД исходных двух чисел. Обратным шагом или с помощью расширенного алгоритма Евклида НОД можно выразить как линейную комбинацию двух исходных чисел, то есть сумму двух чисел, каждое из которых умножено на целое число (например, 21 = 5 × 105 + (−2) × 252 ). Тот факт, что НОД всегда можно выразить таким образом, известен как тождество Безу .
Версия алгоритма Евклида, описанная выше, которая следует оригинальному представлению Евклида, может потребовать много шагов вычитания, чтобы найти НОД, когда одно из заданных чисел намного больше другого. Более эффективная версия алгоритма сокращает эти шаги, вместо этого заменяя большее из двух чисел его остатком при делении на меньшее из двух (в этой версии алгоритм останавливается при достижении нулевого остатка). Благодаря этому усовершенствованию алгоритм никогда не требует больше шагов, чем в пять раз больше числа цифр (основание 10) меньшего целого числа. Это было доказано Габриэлем Ламе в 1844 году ( теорема Ламе ), [1] [2] и знаменует начало теории вычислительной сложности . Дополнительные методы повышения эффективности алгоритма были разработаны в 20 веке.
Алгоритм Евклида имеет множество теоретических и практических приложений. Он используется для приведения дробей к их простейшей форме и для выполнения деления в модульной арифметике . Вычисления с использованием этого алгоритма являются частью криптографических протоколов , которые используются для защиты интернет -коммуникаций, и в методах взлома этих криптосистем путем факторизации больших составных чисел . Алгоритм Евклида может использоваться для решения диофантовых уравнений , таких как нахождение чисел, которые удовлетворяют нескольким сравнениям в соответствии с китайской теоремой об остатках , для построения непрерывных дробей и для нахождения точных рациональных приближений к действительным числам. Наконец, его можно использовать в качестве основного инструмента для доказательства теорем в теории чисел, таких как теорема Лагранжа о четырех квадратах и уникальность разложений на простые множители .
Первоначальный алгоритм был описан только для натуральных чисел и геометрических длин (действительных чисел), но в 19 веке алгоритм был обобщен на другие типы чисел, такие как гауссовы целые числа и многочлены одной переменной. Это привело к современным абстрактным алгебраическим понятиям, таким как евклидовы области .
Алгоритм Евклида вычисляет наибольший общий делитель (НОД) двух натуральных чисел a и b . Наибольший общий делитель g — это наибольшее натуральное число, которое делит как a , так и b без остатка. Синонимы НОД включают наибольший общий множитель (НОД), наибольший общий множитель (НОД), наибольший общий делитель (НОД) и наибольшую общую меру (НОМ). Наибольший общий делитель часто записывается как НОД( a , b ) или, проще говоря, как ( a , b ) , [3] , хотя последняя запись неоднозначна, также используется для таких понятий, как идеал в кольце целых чисел , который тесно связан с НОД.
Если gcd( a , b ) = 1 , то a и b называются взаимно простыми (или относительно простыми). [4] Это свойство не означает, что a или b сами по себе являются простыми числами . [5] Например, 6 и 35 раскладываются как 6 = 2 × 3 и 35 = 5 × 7, поэтому они не являются простыми, но их простые множители различны, поэтому 6 и 35 являются взаимно простыми и не имеют общих множителей, кроме 1.
Пусть g = gcd( a , b ) . Поскольку a и b оба кратны g , их можно записать как a = mg и b = ng , и нет большего числа G > g , для которого это верно. Натуральные числа m и n должны быть взаимно простыми, поскольку любой общий множитель можно вынести из m и n , чтобы сделать g больше. Таким образом, любое другое число c , которое делит и a , и b , должно также делить g . Наибольший общий делитель g a и b — это единственный (положительный) общий делитель a и b , который делится на любой другой общий делитель c . [6]
Наибольший общий делитель можно визуализировать следующим образом. [7] Рассмотрим прямоугольную область a на b и любой общий делитель c, который делит как a, так и b точно. Стороны прямоугольника можно разделить на отрезки длиной c , что делит прямоугольник на сетку квадратов со стороной длиной c . НОД g — это наибольшее значение 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 ).
Наибольший общий делитель двух чисел a и b — это произведение простых множителей, общих для двух чисел, где каждый простой множитель может повторяться столько раз, сколько он делит как a, так и b . [8] Например, поскольку 1386 можно разложить на множители 2 × 3 × 3 × 7 × 11 , а 3213 можно разложить на множители 3 × 3 × 3 × 7 × 17 , НОД чисел 1386 и 3213 равен 63 = 3 × 3 × 7 , произведению их общих простых множителей (с повторением 3, поскольку 3 × 3 делит оба числа). Если два числа не имеют общих простых множителей, их НОД равен 1 (получен здесь как пример пустого произведения ); другими словами, они взаимно просты. Ключевым преимуществом алгоритма Евклида является то, что он может эффективно находить НОД без необходимости вычисления простых множителей. [9] [10] Факторизация больших целых чисел считается очень сложной вычислительной задачей, и безопасность многих широко используемых криптографических протоколов основана на ее неосуществимости. [11]
Другое определение НОД полезно в продвинутой математике, в частности в теории колец . [12] Наибольший общий делитель g двух ненулевых чисел a и b также является их наименьшей положительной целочисленной линейной комбинацией, то есть наименьшим положительным числом вида ua + vb , где u и v — целые числа. Множество всех целочисленных линейных комбинаций a и b на самом деле совпадает с множеством всех кратных g ( mg , где m — целое число). На современном математическом языке идеал , порожденный a и b, является идеалом, порожденным только g (идеал, порожденный одним элементом, называется главным идеалом , а все идеалы целых чисел являются главными идеалами). Некоторые свойства НОД на самом деле легче увидеть с помощью этого описания, например тот факт, что любой общий делитель a и b также делит НОД (он делит оба члена ua + vb ). Эквивалентность этого определения НОД с другими определениями описана ниже.
НОД трех или более чисел равен произведению простых множителей, общих для всех чисел, [13] но его также можно вычислить, многократно вычисляя НОД пар чисел. [14] Например,
Таким образом, алгоритм Евклида, вычисляющий НОД двух целых чисел, достаточен для вычисления НОД произвольного числа целых чисел.
Алгоритм Евклида можно рассматривать как построение последовательности неотрицательных целых чисел, которая начинается с двух заданных целых чисел и и в конечном итоге заканчивается целым числом ноль: с . Тогда целое число будет НОД, и мы можем заявить . Алгоритм указывает, как построить промежуточные остатки с помощью деления с остатком на предыдущей паре, найдя целое частное так, чтобы:
Поскольку последовательность неотрицательных целых чисел строго убывает, она в конечном итоге должна завершиться . Другими словами, поскольку для каждого , и каждое является целым числом, которое строго меньше предыдущего , в конечном итоге не может быть неотрицательного целого числа, меньшего нуля, и, следовательно, алгоритм должен завершиться. Фактически, алгоритм всегда завершится на n-м шаге с равным нулю. [15]
Для иллюстрации предположим, что запрашивается НОД 1071 и 462. Изначально последовательность имеет вид и для того, чтобы найти , нам нужно найти целые числа и такие, что:
Это частное, так как . Это определяет и поэтому последовательность теперь . Следующий шаг — продолжить последовательность, чтобы найти , найдя целые числа и такие, что:
Это частное, так как . Это определяет и поэтому последовательность теперь . Следующий шаг — продолжить последовательность, чтобы найти , найдя целые числа и такие, что:
Это частное, так как . Это определяет и, таким образом, последовательность завершается, поскольку больше не может быть найдено неотрицательного целого числа, меньшего, чем . Предпоследний остаток , таким образом, является требуемым НОД:
Мы можем немного обобщить, отбросив любое требование упорядочения для начальных двух значений и . Если , алгоритм может продолжаться и тривиально обнаружить, что в качестве последовательности остатков будет . Если , то мы также можем продолжать, поскольку , предполагая, что следующим остатком должен быть он сам, а последовательность равна . Обычно это было бы недействительно, поскольку нарушает требование , но теперь у нас есть по построению, поэтому требование автоматически удовлетворяется, и алгоритм Евклида может продолжаться как обычно. Следовательно, отбрасывание любого упорядочения между первыми двумя целыми числами не влияет на вывод о том, что последовательность должна в конечном итоге закончиться, поскольку следующий остаток всегда будет удовлетворять , и все продолжается, как указано выше. Единственные изменения, которые необходимо сделать, заключаются в том, что только для , и что подпоследовательность неотрицательных целых чисел для строго убывает, поэтому исключается из обоих утверждений.
Обоснованность алгоритма Евклида может быть доказана с помощью двухшагового рассуждения. [16] На первом шаге показано , что конечный ненулевой остаток r N −1 делит как a, так и b . Поскольку это общий делитель, он должен быть меньше или равен наибольшему общему делителю g . На втором шаге показано, что любой общий делитель a и b , включая g , должен делить r N −1 ; следовательно, g должен быть меньше или равен r N −1 . Из этих двух противоположных неравенств следует, что r N −1 = g .
Чтобы продемонстрировать, что r N −1 делит как a, так и b (первый шаг), r N −1 делит свое предшественника r N −2
так как окончательный остаток r N равен нулю. r N −1 также делит своего следующего предшественника r N −3
потому что он делит оба члена в правой части уравнения. Повторяя тот же аргумент, r N −1 делит все предыдущие остатки, включая a и b . Ни один из предыдущих остатков r N −2 , r N −3 и т. д. не делит a и b , так как они оставляют остаток. Поскольку r N −1 является общим делителем a и b , r N −1 ≤ g .
На втором шаге любое натуральное число c, которое делит и a, и b (другими словами, любой общий делитель a и b ), делит остатки r k . По определению a и b можно записать как кратные c : a = mc и b = nc , где m и n — натуральные числа. Следовательно, c делит начальный остаток r 0 , так как r 0 = a − q 0 b = mc − q 0 nc = ( m − q 0 n ) c . Аналогичное рассуждение показывает, что c также делит последующие остатки r 1 , r 2 и т. д. Следовательно, наибольший общий делитель g должен делить r N −1 , что подразумевает, что g ≤ r N −1 . Поскольку первая часть рассуждения показала обратное ( r N −1 ≤ g ), то отсюда следует, что g = r N −1 . Таким образом, g является наибольшим общим делителем всех последующих пар: [17] [18]
Для иллюстрации алгоритм Евклида можно использовать для нахождения наибольшего общего делителя a = 1071 и b = 462. Для начала числа, кратные 462, вычитаются из 1071 до тех пор, пока остаток не станет меньше 462. Можно вычесть два таких числа ( q 0 = 2), получив остаток 147:
Затем из 462 вычитаются числа, кратные 147, до тех пор, пока остаток не станет меньше 147. Можно вычесть три числа, кратные 147 ( q 1 = 3), и в остатке получится 21:
Затем из 147 вычитаются числа, кратные 21, до тех пор, пока остаток не станет меньше 21. Можно вычесть семь чисел, кратных 21 ( q 2 = 7), не оставив остатка:
Поскольку последний остаток равен нулю, алгоритм заканчивается на 21 как наибольшем общем делителе 1071 и 462. Это согласуется с gcd(1071, 462), найденным выше с помощью разложения на простые множители. В табличной форме шаги таковы:
Алгоритм Евклида можно визуализировать в терминах аналогии с мозаикой, приведенной выше для наибольшего общего делителя. [19] Предположим, что мы хотим покрыть прямоугольник a × b квадратными плитками точно, где a — большее из двух чисел. Сначала мы пытаемся замостить прямоугольник, используя квадратные плитки b × b ; однако это оставляет остаточный прямоугольник r 0 × b нетронутым, где r 0 < b . Затем мы пытаемся замостить остаточный прямоугольник квадратными плитками r 0 × r 0 . Это оставляет второй остаточный прямоугольник r 1 × r 0 , который мы пытаемся замостить квадратными плитками r 1 × r 1 и так далее. Последовательность заканчивается, когда нет остаточного прямоугольника, т. е. когда квадратные плитки точно покрывают предыдущий остаточный прямоугольник. Длина сторон наименьшей квадратной плитки равна НОД размеров исходного прямоугольника. Например, наименьшая квадратная плитка на соседнем рисунке имеет размеры 21×21 (показана красным), а 21 — это НОД 1071 и 462, размеров исходного прямоугольника (показана зеленым).
На каждом шаге k алгоритм Евклида вычисляет частное q k и остаток r k из двух чисел r k −1 и r k −2.
где r k неотрицательно и строго меньше абсолютного значения r k −1 . Теорема, лежащая в основе определения евклидова деления, гарантирует, что такое частное и остаток всегда существуют и являются единственными. [20]
В оригинальной версии алгоритма Евклида частное и остаток находятся путем повторного вычитания; то есть r k −1 вычитается из r k −2 повторно до тех пор, пока остаток r k не станет меньше r k −1 . После этого r k и r k −1 меняются местами, и процесс повторяется. Евклидово деление сводит все шаги между двумя обменами к одному шагу, что, таким образом, более эффективно. Более того, частные не нужны, поэтому можно заменить Евклидово деление на операцию по модулю , которая дает только остаток. Таким образом, итерация алгоритма Евклида становится просто
Реализации алгоритма могут быть выражены в псевдокоде . Например, версия на основе деления может быть запрограммирована как [21]
функция gcd(a, b) пока b ≠ 0 т := б б := а mod б а := т вернуть
В начале k- й итерации переменная b содержит последний остаток r k −1 , тогда как переменная a содержит его предшественника, r k −2 . Шаг b := a mod b эквивалентен приведенной выше формуле рекурсии r k ≡ r k −2 mod r k −1 . Временная переменная t содержит значение r k −1 , пока вычисляется следующий остаток r k . В конце итерации цикла переменная b содержит остаток r k , тогда как переменная a содержит его предшественника, r k −1 .
(Если допускаются отрицательные входные данные или если функция mod может возвращать отрицательные значения, последнюю строку необходимо изменить на return abs (a).)
В версии, основанной на вычитании, которая была оригинальной версией Евклида, вычисление остатка ( ) заменяется повторным вычитанием. [22] В отличие от версии, основанной на делении, которая работает с произвольными целыми числами в качестве входных данных, версия, основанная на вычитании, предполагает, что входные данные состоят из положительных целых чисел, и останавливается, когда a = b :b := a mod b
функция gcd(a, b) пока a ≠ b если a > b а := а − б еще б := б − а вернуть
Переменные a и b поочередно содержат предыдущие остатки r k −1 и r k −2 . Предположим, что a больше b в начале итерации; тогда a равно r k −2 , так как r k −2 > r k −1 . Во время итерации цикла a уменьшается на кратные предыдущего остатка b до тех пор, пока a не станет меньше b . Затем a является следующим остатком r k . Затем b уменьшается на кратные a до тех пор, пока он снова не станет меньше a , давая следующий остаток r k +1 , и так далее.
Рекурсивная версия [23] основана на равенстве НОД последовательных остатков и условии останова НОД( r N −1 , 0) = r N −1 .
функция gcd(a, b) если b = 0 вернуть a иначе вернуть gcd(b, a mod b)
(Как и выше, если допускаются отрицательные входные данные или если функция mod может возвращать отрицательные значения, инструкция « return a» должна быть изменена на « return max (a, −a)».)
Для иллюстрации, gcd(1071, 462) вычисляется из эквивалентного gcd(462, 1071 mod 462) = gcd(462, 147). Последний GCD вычисляется из gcd(147, 462 mod 147) = gcd(147, 21), который в свою очередь вычисляется из gcd(21, 147 mod 21) = gcd(21, 0) = 21.
В другой версии алгоритма Евклида частное на каждом шаге увеличивается на единицу, если полученный отрицательный остаток по величине меньше типичного положительного остатка. [24] [25] Ранее уравнение
предполагается, что | r k −1 | > r k > 0. Однако можно вычислить альтернативный отрицательный остаток e k :
если r k −1 > 0 или
если r k −1 < 0 .
Если r k заменить на e k . когда | e k | < | r k | , то получим вариант алгоритма Евклида, такой что
на каждом шагу.
Леопольд Кронекер показал, что эта версия требует наименьшего количества шагов из всех версий алгоритма Евклида. [24] [25] В более общем смысле, было доказано, что для любых входных чисел a и b количество шагов минимально тогда и только тогда, когда q k выбрано таким образом, что где — золотое сечение . [26]
Алгоритм Евклида является одним из старейших алгоритмов, используемых повсеместно. [27] Он появляется в «Началах » Евклида (ок. 300 г. до н. э.), в частности в Книге 7 (Предложения 1–2) и Книге 10 (Предложения 2–3). В Книге 7 алгоритм сформулирован для целых чисел, тогда как в Книге 10 он сформулирован для длин отрезков прямых. (В современном использовании можно было бы сказать, что он был сформулирован там для действительных чисел . Но длины, площади и объемы, представленные как действительные числа в современном использовании, не измеряются в тех же единицах, и не существует естественной единицы длины, площади или объема; концепция действительных чисел в то время была неизвестна.) Последний алгоритм является геометрическим. НОД двух длин a и b соответствует наибольшей длине g , которая измеряет a и b равномерно; другими словами, длины a и b являются целыми кратными длины g .
Алгоритм, вероятно, не был открыт Евклидом , который собрал результаты более ранних математиков в своих «Началах» . [28] [29] Математик и историк Б. Л. ван дер Варден предполагает, что Книга VII происходит от учебника по теории чисел, написанного математиками школы Пифагора . [30] Алгоритм, вероятно, был известен Евдоксу Книдскому (около 375 г. до н. э.). [27] [31] Алгоритм может даже предшествовать Евдоксу, [32] [33] судя по использованию технического термина ἀνθυφαίρεσις ( anthyphairesis , взаимное вычитание) в работах Евклида и Аристотеля . [34]
Столетия спустя алгоритм Евклида был открыт независимо как в Индии, так и в Китае, [35] в первую очередь для решения диофантовых уравнений , возникших в астрономии, и создания точных календарей. В конце V века индийский математик и астроном Арьябхата описал алгоритм как «измельчитель», [36] возможно, из-за его эффективности в решении диофантовых уравнений. [37] Хотя частный случай китайской теоремы об остатках уже был описан в китайской книге «Суньцзы Суаньцзин» , [38] общее решение было опубликовано Цинь Цзюшао в его книге 1247 года «Шушу Цзючжан» (數書九章Математический трактат в девяти разделах ). [39] Алгоритм Евклида был впервые описан численно и популяризирован в Европе во втором издании « Приятных и забавных задач» Баше (1624). [36] В Европе он также использовался для решения диофантовых уравнений и при построении цепных дробей . Расширенный алгоритм Евклида был опубликован английским математиком Николасом Сондерсоном (Nicholas Saunderson) , [40] который приписал его Роджеру Коутсу как метод эффективного вычисления цепных дробей. [41]
В 19 веке алгоритм Евклида привёл к разработке новых числовых систем, таких как целые числа Гаусса и целые числа Эйзенштейна . В 1815 году Карл Гаусс использовал алгоритм Евклида, чтобы продемонстрировать уникальную факторизацию гауссовых целых чисел , хотя его работа была впервые опубликована в 1832 году. [42] Гаусс упоминал алгоритм в своих Disquisitiones Arithmeticae (опубликованных в 1801 году), но только как метод для цепных дробей . [35] Петер Густав Лежён-Дирихле, по-видимому, был первым, кто описал алгоритм Евклида как основу для большей части теории чисел. [43] Лежён-Дирихле отметил, что многие результаты теории чисел, такие как уникальная факторизация, будут справедливы для любой другой системы чисел, к которой можно было бы применить алгоритм Евклида. [44] Лекции Лежена Дирихле по теории чисел были отредактированы и расширены Ричардом Дедекиндом , который использовал алгоритм Евклида для изучения алгебраических целых чисел , нового общего типа чисел. Например, Дедекинд был первым, кто доказал теорему Ферма о двух квадратах, используя уникальную факторизацию гауссовых целых чисел. [45] Дедекинд также определил концепцию евклидовой области , числовой системы, в которой может быть определена обобщенная версия евклидова алгоритма (как описано ниже). В последние десятилетия 19-го века евклидов алгоритм постепенно затмевается более общей теорией идеалов Дедекинда . [46]
Другие приложения алгоритма Евклида были разработаны в 19 веке. В 1829 году Чарльз Штурм показал, что алгоритм полезен в методе цепи Штурма для подсчета действительных корней многочленов в любом заданном интервале. [47]
Алгоритм Евклида был первым алгоритмом целочисленных отношений , который является методом нахождения целочисленных отношений между соизмеримыми действительными числами. Было разработано несколько новых алгоритмов целочисленных отношений , таких как алгоритм Хеламана Фергюсона и Р. В. Форкада (1979) [48] и алгоритм LLL . [49] [50]
В 1969 году Коул и Дэви разработали игру для двух игроков, основанную на алгоритме Евклида, названную «Игра Евклида» [51] , которая имеет оптимальную стратегию. [52] Игроки начинают с двух кучек камней a и b . Игроки по очереди вынимают m кратных меньшей кучки из большей. Таким образом, если две кучки состоят из камней x и y , где x больше y , следующий игрок может уменьшить большую кучку с x камней до x − my камней, при условии, что последнее является неотрицательным целым числом. Победителем становится первый игрок, который уменьшит одну кучку до нуля камней. [53] [54]
Тождество Безу утверждает, что наибольший общий делитель g двух целых чисел a и b может быть представлен в виде линейной суммы исходных двух чисел a и b . [55] Другими словами, всегда можно найти целые числа s и t, такие что g = sa + tb . [56] [57]
Целые числа s и t можно вычислить из частных q 0 , q 1 и т. д., изменив порядок уравнений в алгоритме Евклида. [58] Начиная с предпоследнего уравнения, g можно выразить через частное q N −1 и два предыдущих остатка, r N −2 и r N −3 :
Эти два остатка можно также выразить через их частные и предыдущие остатки:
Подстановка этих формул для r N −2 и r N −3 в первое уравнение дает g как линейную сумму остатков r N −4 и r N −5 . Процесс подстановки остатков формулами, включающими их предшественников, может быть продолжен до тех пор, пока не будут достигнуты исходные числа a и b :
После подстановки всех остатков r 0 , r 1 и т. д. окончательное уравнение выражает g как линейную сумму a и b , так что g = sa + tb .
Алгоритм Евклида и, следовательно, тождество Безу можно обобщить на контекст евклидовых областей .
Тождество Безу дает еще одно определение наибольшего общего делителя g двух чисел a и b . [12] Рассмотрим множество всех чисел ua + vb , где u и v — любые два целых числа. Поскольку a и b оба делятся на g , каждое число в множестве делится на g . Другими словами, каждое число множества является целым кратным g . Это верно для каждого общего делителя a и b . Однако, в отличие от других общих делителей, наибольший общий делитель является членом множества; по тождеству Безу выбор u = s и v = t дает g . Меньший общий делитель не может быть членом множества, поскольку каждый член множества должен делиться на g . И наоборот, любое кратное m числа g можно получить, выбрав u = ms и v = mt , где s и t — целые числа тождества Безу. Это можно увидеть, умножив тождество Безу на m ,
Следовательно, множество всех чисел ua + vb эквивалентно множеству кратных m числа g . Другими словами, множество всех возможных сумм целых кратных двух чисел ( a и b ) эквивалентно множеству кратных gcd( a , b ). Говорят, что GCD является генератором идеала a и b . Это определение GCD привело к современным абстрактным алгебраическим понятиям главного идеала (идеала, порожденного одним элементом) и области главных идеалов ( области , в которой каждый идеал является главным идеалом) .
Некоторые проблемы могут быть решены с использованием этого результата. [59] Например, рассмотрим две мерные чашки объемом a и b . Путем сложения/вычитания u, кратных первой чашке, и v, кратных второй чашке, можно измерить любой объем ua + vb . Все эти объемы кратны g = gcd( a , b ).
Целые числа s и t тождества Безу могут быть эффективно вычислены с помощью расширенного алгоритма Евклида . Это расширение добавляет два рекурсивных уравнения к алгоритму Евклида [60]
с начальными значениями
Используя эту рекурсию, целые числа Безу s и t задаются как s = s N и t = t N , где N+1 — шаг, на котором алгоритм завершается с r N+1 = 0.
Обоснованность этого подхода может быть показана индукцией. Предположим, что формула рекурсии верна до шага k − 1 алгоритма; другими словами, предположим, что
для всех j меньших k . k -й шаг алгоритма дает уравнение
Поскольку предполагается, что рекурсивная формула верна для r k −2 и r k −1 , их можно выразить через соответствующие переменные s и t
Перестановка этого уравнения дает рекурсивную формулу для шага k , как и требуется
Целые числа s и t также можно найти с помощью эквивалентного матричного метода. [61] Последовательность уравнений алгоритма Евклида
можно записать как произведение матриц частных 2×2, умноженных на двумерный вектор остатка
Пусть M представляет собой произведение всех матриц-факторов
Это упрощает алгоритм Евклида до вида
Чтобы выразить g как линейную сумму a и b , обе стороны этого уравнения можно умножить на обратную матрицу M. [61] [62] Определитель M равен (−1) N +1 , поскольку он равен произведению определителей матриц частных, каждая из которых отрицательна. Поскольку определитель M никогда не равен нулю, вектор конечных остатков можно решить с помощью обратной матрицы M
Так как верхнее уравнение дает
два целых числа тождества Безу равны s = (−1) N +1 m 22 и t = (−1) N m 12. Матричный метод столь же эффективен, как и эквивалентная рекурсия, с двумя умножениями и двумя сложениями на шаг алгоритма Евклида.
Тождество Безу необходимо для многих приложений алгоритма Евклида, таких как демонстрация уникальной факторизации чисел на простые множители. [63] Чтобы проиллюстрировать это, предположим, что число L можно записать как произведение двух множителей u и v , то есть L = uv . Если другое число w также делит L , но является взаимно простым с u , то w должно делить v , по следующему аргументу: если наибольший общий делитель u и w равен 1, то можно найти целые числа s и t такие, что
по тождеству Безу. Умножение обеих частей на v дает соотношение:
Так как w делит оба члена в правой части, оно также должно делить левую часть, v . Этот результат известен как лемма Евклида . [64] В частности, если простое число делит L , то оно должно делить по крайней мере один множитель L. И наоборот, если число w взаимно просто с каждым из ряда чисел a 1 , a 2 , ..., an , то w также взаимно просто с их произведением, a 1 × a 2 × ... × a n . [64]
Леммы Евклида достаточно, чтобы доказать, что каждое число имеет единственное разложение на простые множители. [65] Чтобы увидеть это, предположим противное, что существуют два независимых разложения числа L на m и n простых множителей соответственно.
Поскольку каждое простое число p делит L по предположению, оно также должно делить один из множителей q ; поскольку каждое число q также является простым, должно быть, что p = q . Итеративное деление на множители p показывает, что каждое число p имеет равный аналог q ; два разложения на простые множители идентичны, за исключением их порядка. Уникальное разложение чисел на простые множители имеет множество применений в математических доказательствах, как показано ниже.
Диофантовы уравнения — это уравнения, решения которых ограничены целыми числами; они названы в честь александрийского математика третьего века Диофанта . [66] Типичное линейное диофантово уравнение ищет целые числа x и y , такие, что [67]
где a , b и c — заданные целые числа. Это можно записать как уравнение для x в модульной арифметике :
Пусть g будет наибольшим общим делителем a и b . Оба члена в ax + by делятся на g ; следовательно, c также должен делиться на g , иначе уравнение не имеет решений. Разделив обе части на c / g , уравнение можно свести к тождеству Безу
где s и t можно найти с помощью расширенного алгоритма Евклида . [68] Это дает одно решение диофантова уравнения, x 1 = s ( c / g ) и y 1 = t ( c / g ).
В общем случае линейное диофантово уравнение не имеет решений или имеет бесконечное число решений. [69] Чтобы найти последнее, рассмотрим два решения, ( x 1 , y 1 ) и ( x 2 , y 2 ), где
или эквивалентно
Поэтому наименьшая разница между двумя решениями x равна b / g , тогда как наименьшая разница между двумя решениями y равна a / g . Таким образом, решения могут быть выражены как
Позволяя u варьироваться по всем возможным целым числам, можно сгенерировать бесконечное семейство решений из одного решения ( x 1 , y 1 ). Если требуется, чтобы решения были положительными целыми числами ( x > 0, y > 0), то возможно только конечное число решений. Это ограничение на приемлемые решения позволяет некоторым системам диофантовых уравнений с большим количеством неизвестных, чем уравнений, иметь конечное число решений; [70] это невозможно для системы линейных уравнений , когда решения могут быть любыми действительными числами (см. Недоопределенная система ).
Конечное поле — это множество чисел с четырьмя обобщенными операциями. Операции называются сложением, вычитанием, умножением и делением и обладают своими обычными свойствами, такими как коммутативность , ассоциативность и дистрибутивность . Примером конечного поля является множество из 13 чисел {0, 1, 2, ..., 12}, использующее модульную арифметику . В этом поле результаты любой математической операции (сложения, вычитания, умножения или деления) сводятся по модулю 13; то есть числа, кратные 13, добавляются или вычитаются до тех пор, пока результат не будет приведен в диапазон 0–12. Например, результат 5 × 7 = 35 mod 13 = 9. Такие конечные поля можно определить для любого простого числа p ; используя более сложные определения, их также можно определить для любой степени m простого числа p m . Конечные поля часто называют полями Галуа и обозначают сокращенно GF( p ) или GF( p m ).
В таком поле с m числами каждый ненулевой элемент a имеет уникальный модульный мультипликативный обратный элемент , a −1 такой, что aa −1 = a −1 a ≡ 1 mod m . Этот обратный элемент можно найти, решив уравнение сравнения ax ≡ 1 mod m , [71] или эквивалентное линейное диофантово уравнение [72]
Это уравнение может быть решено с помощью алгоритма Евклида, как описано выше. Нахождение мультипликативных обратных чисел является важным шагом в алгоритме RSA , который широко используется в электронной коммерции ; в частности, уравнение определяет целое число, используемое для расшифровки сообщения. [73] Хотя алгоритм RSA использует кольца, а не поля, алгоритм Евклида все равно может быть использован для нахождения мультипликативного обратного числа там, где оно существует. Алгоритм Евклида также имеет другие приложения в кодах исправления ошибок ; например, его можно использовать в качестве альтернативы алгоритму Берлекэмпа–Месси для декодирования кодов BCH и Рида–Соломона , которые основаны на полях Галуа. [74]
Алгоритм Евклида также может быть использован для решения нескольких линейных диофантовых уравнений. [75] Такие уравнения возникают в китайской теореме об остатках , которая описывает новый метод представления целого числа x . Вместо представления целого числа его цифрами, оно может быть представлено его остатками x i по модулю набора N взаимно простых чисел m i : [76]
Цель состоит в том, чтобы определить x из его N остатков x i . Решение состоит в том, чтобы объединить множественные уравнения в одно линейное диофантово уравнение с гораздо большим модулем M , который является произведением всех отдельных модулей m i , и определить M i как
Таким образом, каждый M i является произведением всех модулей, кроме m i . Решение зависит от нахождения N новых чисел h i таких, что
С помощью этих чисел h i любое целое число x может быть восстановлено из его остатков x i с помощью уравнения
Поскольку эти числа h i являются мультипликативными обратными числами M i , их можно найти с помощью алгоритма Евклида, как описано в предыдущем подразделе.
Алгоритм Евклида может быть использован для организации множества всех положительных рациональных чисел в бесконечное двоичное дерево поиска , называемое деревом Штерна–Броко . Число 1 (выраженное как дробь 1/1) помещается в корень дерева, а местоположение любого другого числа a / b может быть найдено путем вычисления gcd( a , b ) с использованием исходной формы алгоритма Евклида, в котором каждый шаг заменяет большее из двух заданных чисел его разностью с меньшим числом (не его остатком), останавливаясь при достижении двух равных чисел. Шаг алгоритма Евклида, который заменяет первое из двух чисел, соответствует шагу в дереве от узла к его правому потомку, а шаг, который заменяет второе из двух чисел, соответствует шагу в дереве от узла к его левому потомку. Последовательность шагов, построенная таким образом, не зависит от того, задано ли a / b в младших членах, и образует путь от корня до узла, содержащего число a / b . [77] Этот факт можно использовать для доказательства того, что каждое положительное рациональное число появляется в этом дереве ровно один раз.
Например, 3/4 можно найти, начав с корня, двигаясь влево один раз, затем вправо два раза:
Алгоритм Евклида имеет почти такое же отношение к другому бинарному дереву на рациональных числах, называемому деревом Калкина–Вилфа . Разница в том, что путь обратный: вместо создания пути от корня дерева к цели, он создает путь от цели к корню.
Алгоритм Евклида имеет тесную связь с цепными дробями . [78] Последовательность уравнений можно записать в виде
Последний член в правой части всегда равен обратному члену левой части следующего уравнения. Таким образом, первые два уравнения могут быть объединены в
Третье уравнение можно использовать для замены знаменателя r 1 / r 0 , получая
Конечное отношение остатков r k / r k −1 всегда можно заменить, используя следующее уравнение в ряду, вплоть до последнего уравнения. Результатом является цепная дробь
В приведенном выше примере был вычислен gcd(1071, 462), а частные q k были равны 2, 3 и 7 соответственно. Таким образом, дробь 1071/462 можно записать так:
что может быть подтверждено расчетом.
Вычисление наибольшего общего делителя является важным шагом в нескольких алгоритмах факторизации целых чисел , [79] таких как алгоритм Полларда ро , [80] алгоритм Шора , [81] метод факторизации Диксона [82] и факторизация эллиптической кривой Ленстры . [83] Для эффективного нахождения этого НОД можно использовать алгоритм Евклида. Факторизация цепных дробей использует цепные дроби, которые определяются с помощью алгоритма Евклида. [84]
Вычислительная эффективность алгоритма Евклида была тщательно изучена. [85] Эта эффективность может быть описана числом шагов деления, требуемых алгоритмом, умноженным на вычислительные затраты каждого шага. Первый известный анализ алгоритма Евклида принадлежит А. А. Л. Рейно в 1811 году [86], который показал, что число шагов деления на входе ( u , v ) ограничено v ; позже он улучшил это до v /2 + 2. Позже, в 1841 году, П. Дж. Э. Финк показал [87] , что число шагов деления не превышает 2 log 2 v + 1, и, следовательно, алгоритм Евклида работает за время, полиномиальное от размера входных данных. [88] Эмиль Леже в 1837 году изучил наихудший случай, когда входные данные представляют собой последовательные числа Фибоначчи . [88] Анализ Финка был усовершенствован Габриэлем Ламе в 1844 году, [89] который показал, что количество шагов, необходимых для завершения, никогда не превышает пятикратного количества h цифр в десятичной системе счисления меньшего числа b . [90] [91]
В модели равномерной стоимости (подходящей для анализа сложности вычисления НОД для чисел, которые помещаются в одно машинное слово) каждый шаг алгоритма занимает постоянное время , и анализ Ламе подразумевает, что общее время выполнения также равно O ( h ). Однако в модели вычислений, подходящей для вычислений с большими числами, вычислительные затраты на вычисление одного остатка в алгоритме могут достигать O ( h2 ). [92] В этом случае общее время для всех шагов алгоритма можно проанализировать с помощью телескопического ряда , показывающего, что оно также равно O ( h2 ). Современные алгоритмические методы, основанные на алгоритме Шёнхаге–Штрассена для быстрого целочисленного умножения, могут быть использованы для ускорения этого процесса, что приводит к квазилинейным алгоритмам для НОД. [93] [94]
Число шагов для вычисления НОД двух натуральных чисел, a и b , можно обозначить как T ( a , b ). [95] Если g — НОД a и b , то a = mg и b = ng для двух взаимно простых чисел m и n . Тогда
как можно увидеть, разделив все шаги в алгоритме Евклида на g . [96] По тому же аргументу, количество шагов остается тем же самым, если a и b умножаются на общий множитель w : T ( a , b ) = T ( wa , wb ). Таким образом, количество шагов T может существенно различаться между соседними парами чисел, такими как T( a , b ) и T( a , b + 1), в зависимости от размера двух НОД.
Рекурсивная природа алгоритма Евклида дает еще одно уравнение
где T ( x , 0) = 0 по предположению. [95]
Если алгоритм Евклида требует N шагов для пары натуральных чисел a > b > 0, то наименьшие значения a и b, для которых это верно, — это числа Фибоначчи F N +2 и F N +1 соответственно. [97] Точнее, если алгоритм Евклида требует N шагов для пары a > b , то a ≥ F N +2 и b ≥ F N +1 . Это можно показать по индукции . [98] Если N = 1, то b делит a без остатка; наименьшие натуральные числа, для которых это верно, — это b = 1 и a = 2, то есть F 2 и F 3 соответственно. Теперь предположим, что результат справедлив для всех значений N вплоть до M − 1. Первый шаг алгоритма с M шагами — это a = q 0 b + r 0 , а алгоритм Евклида требует M − 1 шагов для пары b > r 0 . По предположению индукции имеем b ≥ F M +1 и r 0 ≥ F M . Следовательно, a = q 0 b + r 0 ≥ b + r 0 ≥ F M +1 + F M = F M +2 , что и является искомым неравенством. Это доказательство, опубликованное Габриэлем Ламе в 1844 году, представляет собой начало теории вычислительной сложности [99] , а также первое практическое применение чисел Фибоначчи. [97]
Этого результата достаточно, чтобы показать, что число шагов в алгоритме Евклида никогда не может превышать число его цифр (основание 10) более чем в пять раз. [100] Ибо, если алгоритм требует N шагов, то b больше или равно F N +1, что в свою очередь больше или равно φ N −1 , где φ — золотое сечение . Поскольку b ≥ φ N −1 , то N − 1 ≤ log φ b . Поскольку log 10 φ > 1/5, ( N − 1)/5 < log 10 φ log φ b = log 10 b . Таким образом, N ≤ 5 log 10 b . Таким образом, алгоритм Евклида всегда требует менее O ( h ) делений, где h — количество цифр в меньшем числе b .
Среднее число шагов, предпринимаемых алгоритмом Евклида, было определено тремя различными способами. Первое определение — это среднее время T ( a ), необходимое для вычисления НОД заданного числа a и меньшего натурального числа b, выбранного с равной вероятностью из целых чисел от 0 до a − 1 [95]
Однако, поскольку T ( a , b ) резко колеблется в зависимости от НОД двух чисел, усредненная функция T ( a ) также является «шумной». [101]
Чтобы уменьшить этот шум, второе среднее значение τ ( a ) берется по всем числам, взаимно простым с a
Существуют φ ( a ) взаимно простые целые числа, меньшие a , где φ — функция Эйлера . Это среднее тау растет плавно с a [102] [103]
с остаточной ошибкой порядка a −(1/6) + ε , где ε бесконечно мала . Константа C в этой формуле называется константой Портера [104] и равна
где γ — константа Эйлера–Маскерони , а ζ' — производная дзета -функции Римана . [105] [106] Главный коэффициент (12/π 2 ) ln 2 был определен двумя независимыми методами. [107] [108]
Так как первое среднее значение можно вычислить из среднего значения тау путем суммирования по делителям d числа a [109]
его можно аппроксимировать формулой [110]
где Λ( d ) — функция Мангольдта . [111]
Третье среднее значение Y ( n ) определяется как среднее число шагов, необходимых, когда a и b выбираются случайным образом (с равномерным распределением) от 1 до n [110]
Подстановка приближенной формулы для T ( a ) в это уравнение дает оценку для Y ( n ) [112]
На каждом шаге k алгоритма Евклида частное q k и остаток r k вычисляются для заданной пары целых чисел r k −2 и r k −1.
Вычислительные затраты на шаг связаны в основном с нахождением q k , поскольку остаток r k можно быстро вычислить из r k −2 , r k −1 и q k
Вычислительные затраты на деление h -битных чисел масштабируются как O ( h ( ℓ +1)) , где ℓ — длина частного. [92]
Для сравнения, оригинальный алгоритм Евклида, основанный на вычитании, может быть намного медленнее. Одно целочисленное деление эквивалентно частному q числа вычитаний. Если отношение a и b очень велико, частное велико и потребуется много вычитаний. С другой стороны, было показано, что частные, скорее всего, будут маленькими целыми числами. Вероятность данного частного q приблизительно равна ln | u /( u − 1)|, где u = ( q + 1) 2 . [113] Для иллюстрации, вероятность частного 1, 2, 3 или 4 составляет примерно 41,5%, 17,0%, 9,3% и 5,9% соответственно. Поскольку операция вычитания быстрее, чем деления, особенно для больших чисел, [114] алгоритм Евклида, основанный на вычитании, конкурентоспособен с версией, основанной на делении. [115] Это используется в двоичной версии алгоритма Евклида. [116]
Объединение предполагаемого числа шагов с предполагаемыми вычислительными затратами на шаг показывает, что алгоритм Евклида растет квадратично ( h 2 ) со средним числом цифр h в начальных двух числах a и b . Пусть h 0 , h 1 , ..., h N −1 представляют число цифр в последовательных остатках r 0 , r 1 , ..., r N −1 . Поскольку число шагов N растет линейно с h , время выполнения ограничено
Алгоритм Евклида широко используется на практике, особенно для небольших чисел, благодаря своей простоте. [117] Для сравнения можно определить эффективность альтернатив алгоритму Евклида.
Один неэффективный подход к нахождению НОД двух натуральных чисел a и b заключается в вычислении всех их общих делителей; НОД в таком случае является наибольшим общим делителем. Общие делители можно найти, разделив оба числа на последовательные целые числа от 2 до меньшего числа b . Количество шагов этого подхода растет линейно с b или экспоненциально с количеством цифр. Другой неэффективный подход заключается в нахождении простых множителей одного или обоих чисел. Как отмечено выше, НОД равен произведению простых множителей, общих для двух чисел a и b . [8] Современные методы разложения на простые множители также неэффективны; многие современные системы криптографии даже полагаются на эту неэффективность. [11]
Двоичный алгоритм НОД является эффективной альтернативой, которая заменяет деление более быстрыми операциями, используя двоичное представление, используемое компьютерами. [118] [119] Однако эта альтернатива также масштабируется как O ( h ²) . Он, как правило, быстрее, чем алгоритм Евклида на реальных компьютерах, хотя он масштабируется таким же образом. [93] Дополнительная эффективность может быть получена путем изучения только первых цифр двух чисел a и b . [120] [121] Двоичный алгоритм может быть расширен на другие основания ( k -арные алгоритмы), [122] с увеличением скорости до пяти раз. [123] Алгоритм НОД Лемера использует тот же общий принцип, что и двоичный алгоритм, для ускорения вычислений НОД в произвольных основаниях.
Рекурсивный подход для очень больших целых чисел (более 25 000 цифр) приводит к квазилинейным целочисленным алгоритмам GCD, [124], таким как алгоритмы Шёнхаге, [125] [126] и Стеле и Циммермана. [127] Эти алгоритмы используют матричную форму 2×2 евклидова алгоритма, приведенного выше. Эти квазилинейные методы обычно масштабируются как O ( h log h 2 log log h ). [93] [94]
Хотя алгоритм Евклида используется для нахождения наибольшего общего делителя двух натуральных чисел (положительных целых чисел), его можно обобщить на действительные числа и другие математические объекты, такие как многочлены , [128] квадратичные целые числа [129] и кватернионы Гурвица . [130] В последних случаях алгоритм Евклида используется для демонстрации важнейшего свойства уникальной факторизации, т. е. того, что такие числа могут быть однозначно разложены на неприводимые элементы , аналоги простых чисел. Уникальная факторизация необходима для многих доказательств теории чисел.
Алгоритм Евклида может быть применен к действительным числам , как описано Евклидом в Книге 10 его Элементов . Цель алгоритма — определить действительное число g таким образом, что два заданных действительных числа, a и b , являются его целыми кратными: a = mg и b = ng , где m и n — целые числа . [28] Эта идентификация эквивалентна нахождению целочисленного отношения между действительными числами a и b ; то есть она определяет целые числа s и t , такие что sa + tb = 0. Если такое уравнение возможно, a и b называются соизмеримыми длинами, в противном случае они являются несоизмеримыми длинами . [131] [132]
Действительный алгоритм Евклида отличается от своего целочисленного аналога в двух отношениях. Во-первых, остатки r k являются действительными числами, хотя частные q k являются целыми числами, как и прежде. Во-вторых, алгоритм не гарантирует, что завершится за конечное число N шагов. Если это так, то дробь a / b является рациональным числом, т. е. отношением двух целых чисел
и может быть записана как конечная цепная дробь [ q 0 ; q 1 , q 2 , ..., q N ] . Если алгоритм не останавливается, дробь a / b является иррациональным числом и может быть описана бесконечной цепной дробью [ q 0 ; q 1 , q 2 , …] . [133] Примерами бесконечных цепных дробей являются золотое сечение φ = [1; 1, 1, ...] и квадратный корень из двух , √ 2 = [1; 2, 2, ...] . [134] Алгоритм вряд ли остановится, так как почти все отношения a / b двух действительных чисел иррациональны. [135]
Бесконечная непрерывная дробь может быть усечена на шаге k [ q 0 ; q 1 , q 2 , ..., q k ] для получения приближения к a / b , которое улучшается с увеличением k . Приближение описывается сходящимися дробями m k / n k ; числитель и знаменатели взаимно просты и подчиняются рекуррентному соотношению
где m −1 = n −2 = 1 и m −2 = n −1 = 0 — начальные значения рекурсии. Сходящаяся дробь m k / n k — наилучшее рациональное числовое приближение к a / b со знаменателем n k : [136]
Полиномы от одной переменной x можно складывать, умножать и разлагать на неприводимые полиномы , которые являются аналогами простых чисел для целых чисел. Наибольший общий делитель полинома g ( x ) двух полиномов a ( x ) и b ( x ) определяется как произведение их общих неприводимых полиномов, которые можно определить с помощью алгоритма Евклида. [128] Основная процедура аналогична процедуре для целых чисел. На каждом шаге k определяются частный полином q k ( x ) и остаток полинома r k ( x ) для удовлетворения рекурсивного уравнения
где r −2 ( x ) = a ( x ) и r −1 ( x ) = b ( x ) . Каждый частный многочлен выбирается таким образом, что каждый остаток либо равен нулю, либо имеет степень, меньшую степени своего предшественника: deg[ r k ( x )] < deg[ r k −1 ( x )] . Поскольку степень является неотрицательным целым числом и поскольку она уменьшается с каждым шагом, алгоритм Евклида завершается за конечное число шагов. Последний ненулевой остаток является наибольшим общим делителем исходных двух многочленов, a ( x ) и b ( x ) . [137]
Например, рассмотрим следующие два полинома четвертой степени, каждый из которых раскладывается на два квадратных полинома:
Деление a ( x ) на b ( x ) дает остаток r 0 ( x ) = x 3 + (2/3) x 2 + (5/3) x − (2/3) . На следующем шаге b ( x ) делится на r 0 ( x ), давая остаток r 1 ( x ) = x 2 + x + 2 . Наконец, деление r 0 ( x ) на r 1 ( x ) дает нулевой остаток, указывая на то, что r 1 ( x ) является наибольшим общим делителем многочленов a ( x ) и b ( x ) , что согласуется с их факторизацией.
Многие из описанных выше приложений для целых чисел переносятся на многочлены. [138] Алгоритм Евклида может быть использован для решения линейных диофантовых уравнений и китайских задач на остатки для многочленов; также могут быть определены непрерывные дроби многочленов.
Полиномиальный алгоритм Евклида имеет и другие приложения, такие как цепи Штурма , метод подсчета нулей полинома , которые лежат внутри заданного действительного интервала . [139] Это, в свою очередь, имеет приложения в нескольких областях, таких как критерий устойчивости Рауса-Гурвица в теории управления . [140]
Наконец, коэффициенты многочленов не обязательно должны быть получены из целых чисел, действительных чисел или даже комплексных чисел. Например, коэффициенты могут быть получены из общего поля, такого как конечные поля GF( p ), описанные выше. Соответствующие выводы об алгоритме Евклида и его приложениях справедливы даже для таких многочленов. [128]
Гауссовы целые числа являются комплексными числами вида α = u + vi , где u и v являются обычными целыми числами [примечание 2], а i является квадратным корнем из отрицательной единицы . [141] Определив аналог алгоритма Евклида, можно показать, что гауссовы целые числа являются однозначно факторизуемыми, с помощью приведенного выше аргумента. [42] Эта уникальная факторизация полезна во многих приложениях, таких как вывод всех пифагоровых троек или доказательство теоремы Ферма о суммах двух квадратов . [141] В целом, алгоритм Евклида удобен в таких приложениях, но не является необходимым; например, теоремы часто можно доказать с помощью других аргументов.
Алгоритм Евклида, разработанный для двух гауссовых целых чисел α и β, почти такой же, как и для обычных целых чисел, [142], но отличается в двух отношениях. Как и прежде, мы устанавливаем r −2 = α и r −1 = β , и задача на каждом шаге k состоит в том, чтобы определить частное q k и остаток r k таким образом, чтобы
где каждый остаток строго меньше своего предшественника: | r k | < | r k −1 | . Первое отличие состоит в том, что частные и остатки сами являются целыми числами Гаусса, и, таким образом, являются комплексными числами . Частные q k обычно находятся путем округления действительной и комплексной частей точного отношения (например, комплексного числа α / β ) до ближайших целых чисел. [142] Второе отличие заключается в необходимости определения того, как один комплексный остаток может быть «меньше» другого. Для этого определяется функция нормы f ( u + vi ) = u 2 + v 2 , которая преобразует каждое целое число Гаусса u + vi в обычное целое число. После каждого шага k алгоритма Евклида норма остатка f ( r k ) меньше нормы предыдущего остатка, f ( r k −1 ) . Поскольку норма является неотрицательным целым числом и уменьшается с каждым шагом, алгоритм Евклида для гауссовых целых чисел заканчивается за конечное число шагов. [143] Окончательный ненулевой остаток равен gcd( α , β ) , гауссовскому целому числу наибольшей нормы, которое делит как α , так и β ; он уникален с точностью до умножения на единицу, ±1 или ± i . [144]
Многие другие приложения алгоритма Евклида переносятся на гауссовы целые числа. Например, его можно использовать для решения линейных диофантовых уравнений и китайских задач на остатки для гауссовых целых чисел; [145] также можно определить непрерывные дроби гауссовых целых чисел. [142]
Набор элементов под двумя бинарными операциями , обозначаемыми как сложение и умножение, называется евклидовой областью , если он образует коммутативное кольцо R и, грубо говоря, если на них может быть выполнен обобщенный евклидов алгоритм. [146] [147] Две операции такого кольца не обязательно должны быть сложением и умножением обычной арифметики; скорее, они могут быть более общими, такими как операции математической группы или моноида . Тем не менее, эти общие операции должны соблюдать многие законы, управляющие обычной арифметикой, такие как коммутативность , ассоциативность и дистрибутивность .
Обобщенный алгоритм Евклида требует евклидовой функции , т. е. отображения f из R в множество неотрицательных целых чисел, такого, что для любых двух ненулевых элементов a и b в R существуют q и r в R , такие, что a = qb + r и f ( r ) < f ( b ) . [148] Примерами таких отображений являются абсолютное значение для целых чисел, степень для одномерных многочленов и норма для гауссовых целых чисел выше. [149] [150] Основной принцип заключается в том, что каждый шаг алгоритма неумолимо уменьшает f ; следовательно, если f можно уменьшить только конечное число раз, алгоритм должен остановиться через конечное число шагов. Этот принцип опирается на свойство хорошего упорядочения неотрицательных целых чисел, которое утверждает, что каждое непустое множество неотрицательных целых чисел имеет наименьший элемент. [151]
Основная теорема арифметики применима к любой евклидовой области: Любое число из евклидовой области может быть разложено единственным образом на неприводимые элементы . Любая евклидова область является областью уникальной факторизации (UFD), хотя обратное неверно. [151] Евклидовы области и UFD являются подклассами областей GCD , областей, в которых наибольший общий делитель двух чисел всегда существует. [152] Другими словами, наибольший общий делитель может существовать (для всех пар элементов в области), хотя его может быть невозможно найти с помощью евклидова алгоритма. Евклидова область всегда является областью главных идеалов (PID), целостной областью, в которой каждый идеал является главным идеалом . [153] Опять же, обратное неверно: не каждая PID является евклидовой областью.
Уникальная факторизация евклидовых областей полезна во многих приложениях. Например, уникальная факторизация гауссовых целых чисел удобна при выводе формул для всех пифагорейских троек и при доказательстве теоремы Ферма о суммах двух квадратов . [141] Уникальная факторизация также была ключевым элементом в попытке доказательства Великой теоремы Ферма, опубликованной в 1847 году Габриэлем Ламе, тем же математиком, который проанализировал эффективность алгоритма Евклида, основанного на предложении Жозефа Лиувилля . [154] Подход Ламе требовал уникальной факторизации чисел вида x + ωy , где x и y — целые числа, а ω = e 2 iπ / n — корень n- й степени из 1, то есть ω n = 1 . Хотя этот подход оказывается успешным для некоторых значений n (например, n = 3 , целые числа Эйзенштейна ), в общем случае такие числа не факторизуются однозначно. Эта неудача однозначной факторизации в некоторых циклотомических полях привела Эрнста Куммера к концепции идеальных чисел , а позднее Ричарда Дедекинда к идеалам . [155]
Квадратичные целые кольца полезны для иллюстрации евклидовых областей. Квадратичные целые числа являются обобщениями гауссовых целых чисел, в которых мнимая единица i заменена числом ω . Таким образом, они имеют вид u + vω , где u и v — целые числа, а ω имеет одну из двух форм в зависимости от параметра D . Если D не равно кратному четырем плюс один, то
Однако если D действительно кратно четырем плюс один, то
Если функция f соответствует функции нормы , например, той, которая использовалась для упорядочения целых чисел Гаусса выше, то область известна как норма-евклидова . Норма-евклидовы кольца квадратичных целых чисел — это в точности те, где D — одно из значений −11, −7, −3, −2, −1, 2, 3, 5, 6, 7, 11, 13, 17, 19, 21, 29, 33, 37, 41, 57 или 73. [156] [157] Случаи D = −1 и D = −3 дают целые числа Гаусса и целые числа Эйзенштейна соответственно.
Если f может быть любой евклидовой функцией, то список возможных значений D , для которых область определения является евклидовой, пока не известен. [158] Первый пример евклидовой области определения, которая не была норм-евклидовой (с D = 69 ), был опубликован в 1994 году . [158] В 1973 году Вайнбергер доказал, что квадратичное целочисленное кольцо с D > 0 является евклидовым тогда и только тогда, когда оно является областью определения главных идеалов , при условии, что верна обобщенная гипотеза Римана . [129]
Алгоритм Евклида может быть применен к некоторым некоммутативным кольцам, таким как набор кватернионов Гурвица . [130] [159] Пусть α и β представляют два элемента из такого кольца. Они имеют общий правый делитель δ , если α = ξδ и β = ηδ для некоторого выбора ξ и η в кольце. Аналогично, они имеют общий левый делитель, если α = dξ и β = dη для некоторого выбора ξ и η в кольце. Поскольку умножение некоммутативно, существует две версии алгоритма Евклида, одна для правых делителей и одна для левых делителей. [130] [159] Выбрав правые делители, первый шаг в нахождении gcd( α , β ) с помощью алгоритма Евклида можно записать
где ψ 0 представляет собой частное, а ρ 0 — остаток. Здесь частное и остаток выбираются так, что (если они не равны нулю) остаток имеет N ( ρ 0 ) < N ( β ) для «евклидовой функции» N, определяемой аналогично евклидовым функциям евклидовых областей в некоммутативном случае. [159] Это уравнение показывает, что любой общий правый делитель α и β также является общим делителем остатка ρ 0 . Аналогичное уравнение для левых делителей будет иметь вид
При любом выборе процесс повторяется, как указано выше, пока не будет идентифицирован наибольший общий правый или левый делитель. Как и в евклидовой области, «размер» остатка ρ 0 (формально, его евклидова функция или «норма») должен быть строго меньше β , и должно быть только конечное число возможных размеров для ρ 0 , так что алгоритм гарантированно завершится. [160]
Многие результаты для НОД переносятся на некоммутативные числа. Например, тождество Безу утверждает, что правый НОД( α , β ) может быть выражен как линейная комбинация α и β . [161] Другими словами, существуют числа σ и τ такие, что
Аналогичное тождество для левого НОД почти такое же:
Тождество Безу может быть использовано для решения диофантовых уравнений. Например, одно из стандартных доказательств теоремы Лагранжа о четырех квадратах , что каждое положительное целое число может быть представлено в виде суммы четырех квадратов, основано на кватернионных НОДах таким образом. [160]
Алгоритмы, которые сегодня чаще всего используются на практике [для вычисления наибольшего общего делителя], — это, вероятно, двоичный алгоритм и алгоритм Евклида для меньших чисел, а также либо алгоритм Лемера, либо версия Лебеля алгоритма k -арного НОД для больших чисел.
Наш предмет здесь - "последовательность Штурма" функций, определяемых через функцию и ее производную с помощью алгоритма Евклида, для вычисления количества действительных корней многочлена в заданном интервале.
Сформулируйте и докажите аналог китайской теоремы об остатках для гауссовых целых чисел.