stringtranslate.com

Наибольший общий делитель

В математике наибольший общий делитель ( НОД ), также известный как наибольший общий множитель (НОД) , двух или более целых чисел , которые не все равны нулю, — это наибольшее положительное целое число, которое делит каждое из целых чисел. Для двух целых чисел x , y наибольший общий делитель x и y обозначается . Например, НОД 8 и 12 равен 4, то есть НОД(8, 12) = 4. [ 1] [2]

В названии «наибольший общий делитель» прилагательное «наибольший» может быть заменено на «наивысший», а слово «делитель» может быть заменено на «множитель», так что другие названия будут включать наибольший общий множитель и т. д. [3] [4] [5] [6] Исторически другие названия для того же понятия включали наибольшую общую меру . [7]

Это понятие можно распространить на многочлены (см. Наибольший общий делитель многочлена ) и другие коммутативные кольца (см. § В коммутативных кольцах ниже).

Обзор

Определение

Наибольший общий делитель (НОД) целых чисел a и b , по крайней мере одно из которых не равно нулю, — это наибольшее положительное целое число d, такое что d является делителем как a, так и b ; то есть существуют целые числа e и f, такие что a = de и b = df , и d — наибольшее такое целое число. НОД чисел a и b обычно обозначается как gcd( a , b ) . [8]

Когда один из a и b равен нулю, НОД является абсолютным значением ненулевого целого числа: НОД( a , 0) = НОД(0, a ) = | a | . Этот случай важен как завершающий шаг алгоритма Евклида.

Приведенное выше определение не подходит для определения gcd(0, 0) , поскольку не существует наибольшего целого числа n такого, что 0 × n = 0. Однако ноль является своим собственным наибольшим делителем, если наибольшее понимается в контексте отношения делимости, поэтому gcd(0, 0) обычно определяется как 0. Это сохраняет обычные тождества для GCD, и в частности тождество Безу , а именно, что gcd( a , b ) порождает тот же идеал , что и { a , b } . [9] [10] [11] Это соглашение соблюдается во многих системах компьютерной алгебры . [12] Тем не менее, некоторые авторы оставляют gcd(0, 0) неопределенным. [13]

НОД чисел a и b — это их наибольший положительный общий делитель в предпорядковом отношении делимости . Это означает, что общие делители чисел a и b — это в точности делители их НОД. Это обычно доказывается с помощью леммы Евклида , фундаментальной теоремы арифметики или алгоритма Евклида . Именно это значение «наибольшего» используется для обобщений понятия НОД.

Пример

Число 54 можно выразить как произведение двух целых чисел несколькими способами:

Таким образом, полный список делителей числа 54 — 1, 2, 3, 6, 9, 18, 27, 54. Аналогично, делителями числа 24 являются 1, 2, 3, 4, 6, 8, 12, 24. Числа, которые есть в этих двух списках общими, являются общими делителями чисел 54 и 24, то есть,

Из них наибольшее число — 6, поэтому оно является наибольшим общим делителем :

Вычисление всех делителей двух чисел таким способом обычно неэффективно, особенно для больших чисел, имеющих много делителей. Гораздо более эффективные методы описаны в § Вычисление .

Взаимно простые числа

Два числа называются взаимно простыми, или взаимно простыми , если их наибольший общий делитель равен 1. [14] Например, 9 и 28 являются взаимно простыми.

Геометрический вид

«Высокий, узкий прямоугольник, разделенный на сетку квадратов. Прямоугольник имеет ширину в два квадрата и высоту в пять квадратов».
Прямоугольник 24 на 60 покрыт десятью квадратными плитками 12 на 12, где 12 — это НОД чисел 24 и 60. В более общем смысле прямоугольник a на b может быть покрыт квадратными плитками со стороной c только в том случае, если c является общим делителем a и b .

Например, прямоугольную область 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 ).

Приложения

Сокращение дробей

Наибольший общий делитель полезен для сокращения дробей до наименьших членов . [15] Например, gcd(42, 56) = 14 , поэтому,

Наименьшее общее кратное

Наименьшее общее кратное двух целых чисел, которые оба не равны нулю, можно вычислить из их наибольшего общего делителя, используя соотношение

Расчет

Использование разложения на простые множители

Наибольшие общие делители можно вычислить, определив разложения на простые множители двух чисел и сравнив множители. Например, чтобы вычислить gcd(48, 180) , мы находим разложения на простые множители 48 = 2 4  · 3 1 и 180 = 2 2  · 3 2  · 5 1 ; тогда GCD равен 2 min(4,2)  · 3 min(1,2)  · 5 min(0,1) = 2 2  · 3 1  · 5 0 = 12 Соответствующий LCM равен 2 max(4,2)  · 3 max(1,2)  · 5 max(0,1) = 2 4  · 3 2  · 5 1 = 720.

На практике этот метод применим только для небольших чисел, поскольку вычисление разложения на простые множители занимает слишком много времени.

Алгоритм Евклида

Метод, предложенный Евклидом для вычисления наибольших общих делителей, основан на том факте, что для двух положительных целых чисел a и b, таких что a > b , общие делители a и b совпадают с общими делителями ab и b .

Итак, метод Евклида для вычисления наибольшего общего делителя двух положительных целых чисел состоит в замене большего числа разностью чисел и повторении этого до тех пор, пока два числа не станут равными: это и есть их наибольший общий делитель.

Например, чтобы вычислить gcd(48,18) , нужно выполнить следующие действия:

Итак, НОД(48, 18) = 6 .

Этот метод может быть очень медленным, если одно число намного больше другого. Поэтому, как правило, предпочтительным является следующий вариант.

Алгоритм Евклида

Анимация, демонстрирующая применение алгоритма Евклида для нахождения наибольшего общего делителя 62 и 36, который равен 2.

Более эффективным методом является алгоритм Евклида , вариант, в котором разность двух чисел a и b заменяется остатком от евклидова деления (также называемого делением с остатком ) числа a на b .

Обозначая этот остаток как a mod b , алгоритм заменяет ( a , b ) на ( b , a mod b ) несколько раз, пока пара не станет ( d , 0) , где d — наибольший общий делитель.

Например, чтобы вычислить gcd(48,18), вычисление выглядит следующим образом:

Это снова дает gcd(48, 18) = 6 .

Двоичный алгоритм НОД

Двоичный алгоритм НОД — это вариант алгоритма Евклида, специально адаптированный к двоичному представлению чисел, которое используется в большинстве компьютеров .

Двоичный алгоритм НОД отличается от алгоритма Евклида по сути тем, что делит на два каждое четное число, которое встречается в ходе вычислений. Его эффективность обусловлена ​​тем, что в двоичном представлении проверка четности заключается в проверке самой правой цифры, а деление на два заключается в удалении самой правой цифры.

Метод заключается в следующем: начиная с a и b — двух положительных целых чисел, НОД которых ищется.

  1. Если a и b оба четные, то разделите их на два до тех пор, пока хотя бы одно из них не станет нечетным; пусть d — число этих парных делений.
  2. Если а четное, то разделите его на два, пока оно не станет нечетным.
  3. Если b четное, то разделите его на два, пока оно не станет нечетным.
    Теперь a и b оба нечетные и останутся нечетными до конца вычисления.
  4. Пока ab делать
    • Если a > b , то замените a на ab и разделите результат на два, пока a не станет нечетным (поскольку a и b оба нечетные, существует, по крайней мере, одно деление на 2).
    • Если a < b , то замените b на ba и разделите результат на два, пока b не станет нечетным.
  5. Теперь a = b , и наибольший общий делитель равен

Шаг 1 определяет d как наивысшую степень 2 , которая делит a и b , и, таким образом, их наибольший общий делитель. Ни один из шагов не изменяет набор нечетных общих делителей a и b . Это показывает, что когда алгоритм останавливается, результат является правильным. Алгоритм в конечном итоге останавливается, поскольку каждый шаг делит по крайней мере один из операндов по крайней мере на 2. Более того, количество делений на 2 и, таким образом, количество вычитаний не превышает общего количества цифр.

Пример: ( a , b , d ) = (48, 18, 0) → (24, 9, 1) → (12, 9, 1) → (6, 9, 1) → (3, 9, 1) → (3, 3, 1); таким образом, исходный НОД представляет собой произведение 6 чисел 2 d = 2 1 и a = b = 3 .

Двоичный алгоритм НОД особенно прост в реализации и особенно эффективен на бинарных компьютерах. Его вычислительная сложность составляет

Квадрат этой сложности возникает из-за того, что деление на 2 и вычитание занимают время, пропорциональное количеству бит входных данных.

Вычислительная сложность обычно задается в терминах длины n входных данных. Здесь эта длина равна n = log a + log b , и сложность, таким образом, равна

.

Алгоритм НОД Лемера

Алгоритм Лемера основан на наблюдении, что начальные частные, полученные алгоритмом Евклида, могут быть определены на основе только первых нескольких цифр; это полезно для чисел, которые больше, чем компьютерное слово . По сути, извлекаются начальные цифры, обычно образующие одно или два компьютерных слова, и алгоритмы Евклида применяются к этим меньшим числам, пока гарантируется, что частные будут такими же, как те, которые были бы получены с исходными числами. Частные собираются в небольшую матрицу преобразования 2 на 2 (матрицу целых чисел, состоящих из одного слова) для сокращения исходных чисел. Этот процесс повторяется до тех пор, пока числа не станут достаточно малыми, чтобы двоичный алгоритм (см. ниже) стал более эффективным.

Этот алгоритм повышает скорость, поскольку он уменьшает количество операций с очень большими числами и может использовать аппаратную арифметику для большинства операций. Фактически, большинство частных очень малы, поэтому достаточное количество шагов алгоритма Евклида можно собрать в матрице 2x2 целых чисел из одного слова. Когда алгоритм Лемера сталкивается со слишком большим частным, он должен вернуться к одной итерации алгоритма Евклида с евклидовым делением больших чисел.

Другие методы

или функция Томаэ. Штриховка внизу обозначает эллипсы (т.е. пропуск точек из-за чрезвычайно высокой плотности).

Если a и b оба не равны нулю, наибольший общий делитель a и b можно вычислить, используя наименьшее общее кратное (НОК) a и  b :

,

Однако чаще всего НОК вычисляется из НОД.

Используя функцию Тома f ,

что обобщается до рациональных чисел a и b или соизмеримых действительных чисел.

Кит Славин показал, что для нечетных a ≥ 1 :

которая является функцией, которая может быть оценена для комплексного b . [16] Вольфганг Шрамм показал, что

представляет собой целую функцию переменной b для всех положительных целых чисел a, где c d ( k ) представляет собой сумму Рамануджана . [17]

Сложность

Вычислительная сложность вычисления наибольшего общего делителя широко изучалась. [18] Если использовать алгоритм Евклида и элементарные алгоритмы умножения и деления, вычисление наибольшего общего делителя двух целых чисел длиной не более n бит равно O ( n 2 ) . Это означает, что вычисление наибольшего общего делителя имеет, с точностью до постоянного множителя, ту же сложность, что и умножение.

Однако, если используется быстрый алгоритм умножения , можно модифицировать алгоритм Евклида для повышения сложности, но вычисление наибольшего общего делителя становится медленнее, чем умножение. Точнее, если умножение двух целых чисел из n бит занимает время T ( n ) , то самый быстрый известный алгоритм для наибольшего общего делителя имеет сложность O ( T ( n ) log n ) . Это означает, что самый быстрый известный алгоритм имеет сложность O ( n (log n ) 2 ) .

Предыдущие сложности справедливы для обычных моделей вычислений , в частности, для многоленточных машин Тьюринга и машин с произвольным доступом .

Вычисление наибольших общих делителей, таким образом, принадлежит классу задач, разрешимых за квазилинейное время . Тем более , соответствующая задача принятия решений принадлежит классу P задач, разрешимых за полиномиальное время. Неизвестно, принадлежит ли задача GCD классу NC , и поэтому не существует известного способа ее эффективного распараллеливания ; также не известно, является ли она P-полной , что означало бы, что вряд ли возможно эффективно распараллелить вычисление GCD. Шэллкросс и др. показали, что родственная задача (EUGCD, определение последовательности остатков, возникающих в ходе алгоритма Евклида) эквивалентна NC задаче целочисленного линейного программирования с двумя переменными; если одна из задач принадлежит NC или является P-полной , то и другая тоже. [19] Поскольку NC содержит NL , также неизвестно, существует ли алгоритм вычисления GCD, эффективный с точки зрения памяти, даже для недетерминированных машин Тьюринга.

Хотя неизвестно, относится ли эта проблема к NC , существуют параллельные алгоритмы, асимптотически более быстрые, чем алгоритм Евклида; самый быстрый известный детерминированный алгоритм принадлежит Чору и Голдрайху , который (в модели CRCW-PRAM ) может решить проблему за время O ( n /log n ) с n 1+ ε процессорами. [20] Рандомизированные алгоритмы могут решить проблему за время O ((log n ) 2 ) на процессорах [ необходимо разъяснение ] (это суперполином ). [21]

Характеристики

Эта формула часто используется для вычисления наименьшего общего кратного: сначала вычисляется НОД с помощью алгоритма Евклида, а затем произведение заданных чисел делится на их НОД.

где - p -адическая оценка. (последовательность A018804 в OEIS )

Вероятности и ожидаемое значение

В 1972 году Джеймс Э. Найманн показал, что k целых чисел, выбранных независимо и равномерно из {1, ..., n } , являются взаимно простыми с вероятностью 1/ ζ ( k ) , когда n стремится к бесконечности, где ζ относится к дзета-функции Римана . [24] (См. coprime для вывода.) Этот результат был расширен в 1987 году, чтобы показать, что вероятность того, что k случайных целых чисел имеют наибольший общий делитель d, равна d k /ζ( k ) . [25]

Используя эту информацию, можно увидеть (неформально), что ожидаемое значение функции наибольшего общего делителя не существует, когда k = 2. В этом случае вероятность того, что НОД равен d, равна d −2 / ζ (2) , и поскольку ζ (2) = π2 / 6 , мы имеем

Это последнее суммирование является гармоническим рядом , который расходится. Однако, когда k ≥ 3 , ожидаемое значение хорошо определено, и по приведенному выше аргументу оно равно

Для k = 3 это приблизительно равно 1,3684. Для k = 4 это приблизительно равно 1,1106.

В коммутативных кольцах

Понятие наибольшего общего делителя может быть определено в более общем виде для элементов произвольного коммутативного кольца , хотя в общем случае не требуется, чтобы один делитель существовал для каждой пары элементов. [26]

При таком определении два элемента a и b вполне могут иметь несколько наибольших общих делителей или вообще ни одного. Если Rобласть целостности , то любые два НОД элементов a и b должны быть ассоциированными элементами , поскольку по определению любой из них должен делить другой. Действительно, если НОД существует, любой из его ассоциированных элементов также является НОД.

Существование НОД не гарантируется в произвольных целых областях. Однако, если Rуникальная факторизационная область или любая другая область НОД , то любые два элемента имеют НОД. Если Rевклидова область , в которой евклидово деление задано алгоритмически (как в случае, например, когда R = F [ X ], где F — поле , или когда R — кольцо гауссовых целых чисел ), то наибольшие общие делители можно вычислить с помощью формы евклидова алгоритма, основанного на процедуре деления.

Ниже приведен пример области целостности с двумя элементами, не имеющими НОД:

Элементы 2 и 1 + −3 являются двумя максимальными общими делителями (то есть любой общий делитель, кратный 2 , связан с 2 , то же самое справедливо для 1 + −3 , но они не связаны, поэтому наибольшего общего делителя a и  b не существует ) .

В соответствии со свойством Безу мы можем в любом коммутативном кольце рассмотреть набор элементов вида pa + qb , где p и q пробегают все кольцо. Это идеал, порожденный a и b , и обозначается просто ( a , b ) . В кольце, все идеалы которого являются главными ( область главных идеалов или PID), этот идеал будет идентичен множеству кратных некоторого элемента кольца d ; тогда этот d является наибольшим общим делителем a и b . Но идеал ( a , b ) может быть полезен даже тогда, когда нет наибольшего общего делителя a и b . (Действительно, Эрнст Куммер использовал этот идеал в качестве замены для НОД в своей трактовке Великой теоремы Ферма , хотя он представлял его себе как множество кратных некоторого гипотетического или идеального элемента кольца d , откуда и термин теории колец.)

Смотрите также

Примечания

  1. ^ ab Long (1972, стр. 33)
  2. ^ abc Pettofrezzo & Byrkit (1970, стр. 34)
  3. ^ Келли, В. Майкл (2004). Полный идиотский путеводитель по алгебре. Penguin. стр. 142. ISBN 978-1-59257-161-1..
  4. ^ Джонс, Аллин (1999). Целые числа, десятичные дроби, проценты и дроби. Год 7. Pascal Press. С. 16. ISBN 978-1-86441-378-6..
  5. ^ abc Харди и Райт (1979, стр. 20)
  6. ^ Некоторые авторы рассматриваютнаибольший общий знаменатель как синонимнаибольшего общего делителя. Это противоречит общему значению используемых слов, поскольку знаменатель относится кдробям, а две дроби не имеют наибольшего общего знаменателя (если две дроби имеют одинаковый знаменатель, то больший общий знаменатель получается путем умножения всех числителей и знаменателей на одно и то же целоечисло).
  7. ^ Барлоу, Питер ; Пикок, Джордж ; Ларднер, Дионисий ; Эйри, сэр Джордж Бидделл ; Гамильтон, HP ; Леви, А.; Де Морган, Август ; Мосли, Генри (1847). Энциклопедия чистой математики. R. Griffin and Co., стр. 589..
  8. ^ Некоторые авторы используют ( a , b ) , [1] [2] [5] но эта нотация часто двусмысленна. Эндрюс (1994, стр. 16) объясняет это так: «Многие авторы пишут ( a , b ) вместо gcd( a , b ) . Мы этого не делаем, потому что мы часто будем использовать ( a , b ) для представления точки на евклидовой плоскости».
  9. ^ Томас Х. Кормен и др. , Введение в алгоритмы (2-е издание, 2001) ISBN 0262032937 , стр. 852 
  10. ^ Бернард Л. Джонстон, Фред Ричман, Числа и симметрия: Введение в алгебру ISBN 084930301X , стр. 38 
  11. ^ Мартин Р. Диксон и др. , Введение в основные алгебраические структуры ISBN 1118497759 , стр. 59 
  12. ^ например, расчет Wolfram Alpha и Maxima
  13. ^ Джонатан Кац, Иегуда Линделл, Введение в современную криптографию ISBN 1351133012 , 2020, раздел 9.1.1, стр. 45 
  14. ^ Weisstein, Eric W. "Наибольший общий делитель". mathworld.wolfram.com . Получено 30 августа 2020 г.
  15. ^ "Наибольший общий множитель". www.mathsisfun.com . Получено 2020-08-30 .
  16. ^ Славин, Кит Р. (2008). "Q-биномиалы ​​и наибольший общий делитель". ЦЕЛЫЕ ЧИСЛА: Электронный журнал комбинаторной теории чисел . 8. Университет Западной Джорджии , Карлов университет в Праге : A5 . Получено 26.05.2008 .
  17. ^ Шрамм, Вольфганг (2008). "Преобразование Фурье функций наибольшего общего делителя". ЦЕЛЫЕ ЧИСЛА: Электронный журнал комбинаторной теории чисел . 8. Университет Западной Джорджии , Карлов университет в Праге : A50 . Получено 25.11.2008 .
  18. ^ Кнут, Дональд Э. (1997). Искусство программирования . Том 2: Получисленные алгоритмы (3-е изд.). Addison-Wesley Professional. ISBN 0-201-89684-2.
  19. ^ Шэллкросс, Д.; Пан, В.; Лин-Криз, И. (1993). "Эквивалентность NC планарного целочисленного линейного программирования и евклидова НОД" (PDF) . 34-й симпозиум IEEE. Основы компьютерной науки . стр. 557–564. Архивировано (PDF) из оригинала 2006-09-05.
  20. ^ Чор, Б.; Голдрайх, О. (1990). «Улучшенный параллельный алгоритм для целочисленного НОД». Algorithmica . 5 (1–4): 1–10. doi :10.1007/BF01840374. S2CID  17699330.
  21. ^ Адлеман, Л. М.; Компелла, К. (1988). «Использование гладкости для достижения параллелизма». 20-й ежегодный симпозиум ACM по теории вычислений . Нью-Йорк. С. 528–538. doi :10.1145/62212.62264. ISBN 0-89791-264-0. S2CID  9118047.
  22. ^ Мюллер-Хойссен, Фолькерт; Вальтер, Ханс-Отто (2012). «Дов Тамари (бывший Бернхард Тейтлер)». В Мюллер-Хойссен, Фолькерт; Палло, Жан Марсель; Сташефф, Джим (ред.). Ассоциэдры, решетки Тамари и родственные структуры: Tamari Memorial Festschrift . Прогресс в математике. Том. 299. Биркхойзер. стр. 1–40. ISBN 978-3-0348-0405-9.. Сноска 27, стр. 9: «Например, натуральные числа с НОД (наибольшим общим делителем) в качестве операции встречи и НОК (наименьшее общее кратное) в качестве операции соединения определяют (полную дистрибутивную) решетку». Включение этих определений для 0 необходимо для этого результата: если вместо этого исключить 0 из множества натуральных чисел, результирующая решетка не будет полной.
  23. ^ Кнут, Дональд Э .; Грэм, Р. Л.; Паташник, О. (март 1994 г.). Конкретная математика: основа компьютерной науки . Addison-Wesley . ISBN 0-201-55802-5.
  24. ^ Найманн, Дж. Э. (1972). «О вероятности того, что k положительных целых чисел являются взаимно простыми». Журнал теории чисел . 4 (5): 469–473. Bibcode :1972JNT.....4..469N. doi : 10.1016/0022-314X(72)90038-8 .
  25. ^ Чидамбарасвами, Дж.; Ситармачандрарао, Р. (1987). «О вероятности того, что значения m многочленов имеют заданный наибольший общий делитель» Журнал теории чисел . 26 (3): 237–245. doi : 10.1016/0022-314X(87)90081-3 .
  26. ^ Ловетт, Стивен (2015). «Divisibility in Commutative Rings». Абстрактная алгебра: структуры и приложения . Boca Raton: CRC Press. стр. 267–318. ISBN 9781482248913.

Ссылки

Дальнейшее чтение