В математике модульная арифметика — это система арифметики для целых чисел , где числа «переходят» при достижении определенного значения, называемого модулем . Современный подход к модульной арифметике был разработан Карлом Фридрихом Гауссом в его книге Disquisitiones Arithmeticae , опубликованной в 1801 году.
Знакомое использование модульной арифметики — в 12-часовом формате , в котором день делится на два 12-часовых периода. Если сейчас 7:00, то через 8 часов будет 3:00. Простое сложение даст результат 7 + 8 = 15 , но 15:00 читается как 3:00 на циферблате часов, потому что часы «переворачиваются» каждые 12 часов, и номер часа начинается заново с нуля, когда достигает 12. Мы говорим, что 15 сравнимо с 3 по модулю 12, что записывается как 15 ≡ 3 (mod 12), так что 7 + 8 ≡ 3 (mod 12). Аналогично, 8:00 представляет собой период в 8 часов, а умножив это число дважды, получим 16:00, что на циферблате часов отображается как 4:00, что записывается как 2 × 8 ≡ 4 (mod 12).
Для данного целого числа m ≥ 1 , называемого модулем , два целых числа a и b называются сравнимыми по модулю m , если m является делителем их разности; то есть если существует целое число k такое, что
Сравнение по модулю m — это отношение сравнения , то есть отношение эквивалентности , совместимое с операциями сложения , вычитания и умножения . Сравнение по модулю m обозначается
Скобки означают, что (mod m ) применяется ко всему уравнению, а не только к правой части (здесь b ).
Эту запись не следует путать с записью b mod m (без скобок), которая относится к операции деления по модулю , остатку от b при делении на m : то есть b mod m обозначает уникальное целое число r, такое что 0 ≤ r < m и r ≡ b (mod m ) .
Отношение конгруэнтности можно переписать как
явно показывая его связь с евклидовым делением . Однако b здесь не обязательно должен быть остатком при делении a на m . Скорее, a ≡ b (mod m ) утверждает, что a и b имеют одинаковый остаток при делении на m . То есть,
где 0 ≤ r < m — общий остаток. Мы восстанавливаем предыдущее соотношение ( a − b = km ), вычитая эти два выражения и устанавливая k = p − q .
Поскольку сравнение по модулю m определяется делимостью на m и поскольку -1 является единицей в кольце целых чисел, число делится на - m в точности тогда, когда оно делится на m . Это означает, что каждое ненулевое целое число m может быть взято в качестве модуля.
В модуле 12 можно утверждать, что:
потому что разность составляет 38 − 14 = 24 = 2 × 12 , кратная 12. Эквивалентно, 38 и 14 имеют одинаковый остаток 2 при делении на 12 .
Определение конгруэнтности применимо и к отрицательным значениям. Например:
Отношение конгруэнтности удовлетворяет всем условиям отношения эквивалентности :
Если a 1 ≡ b 1 (mod m ) и a 2 ≡ b 2 (mod m ) , или если a ≡ b (mod m ) , то: [1]
Если a ≡ b (mod m ) , то, как правило, неверно, что k a ≡ k b (mod m ) . Однако верно следующее:
Для отмены общих условий у нас действуют следующие правила:
Последнее правило можно использовать для переноса модульной арифметики в деление. Если b делит a , то ( a / b ) mod m = ( a mod bm )/ b .
Модульная мультипликативная обратная величина определяется следующими правилами:
Мультипликативный обратный элемент x ≡ a −1 (mod m ) можно эффективно вычислить, решив уравнение Безу a x + my = 1 для x , y , используя расширенный алгоритм Евклида .
В частности, если p — простое число, то a взаимно просто с p для любого a, такого что 0 < a < p ; таким образом, существует мультипликативная обратная величина для всех a , которые не сравнимы с нулем по модулю p .
Некоторые из более продвинутых свойств отношений конгруэнтности следующие:
Отношение конгруэнтности — это отношение эквивалентности . Класс эквивалентности по модулю m целого числа a — это множество всех целых чисел вида a + km , где k — любое целое число. Он называется классом конгруэнтности или классом вычетов a по модулю m и может обозначаться как ( a mod m ) , или как a или [ a ], когда модуль m известен из контекста.
Каждый класс остатков по модулю m содержит ровно одно целое число в диапазоне . Таким образом, эти целые числа являются представителями своих соответствующих классов остатков.
Обычно проще работать с целыми числами, чем с наборами целых чисел, то есть с наиболее часто рассматриваемыми представителями, а не с их остаточными классами.
Следовательно, ( a mod m ) обозначает, как правило, единственное целое число k, такое что 0 ≤ k < m и k ≡ a (mod m ) ; оно называется вычетом числа a по модулю m .
В частности, ( a mod m ) = ( b mod m ) эквивалентно a ≡ b (mod m ) , и это объясняет, почему в этом контексте « = » часто используется вместо « ≡ ».
Каждый класс остатков по модулю m может быть представлен любым из его членов, хотя мы обычно представляем каждый класс остатков наименьшим неотрицательным целым числом, которое принадлежит этому классу [2] (так как это правильный остаток, который получается в результате деления). Любые два члена различных классов остатков по модулю m являются несопоставимыми по модулю m . Более того, каждое целое число принадлежит одному и только одному классу остатков по модулю m . [3]
Набор целых чисел {0, 1, 2, ..., m − 1} называется наименьшей системой вычетов по модулю m . Любой набор из m целых чисел, никакие два из которых не сравнимы по модулю m , называется полной системой вычетов по модулю m .
Система наименьших остатков — это полная система остатков, а полная система остатков — это просто набор, содержащий ровно одного представителя каждого класса остатков по модулю m . [4] Например, система наименьших остатков по модулю 4 — это {0, 1, 2, 3} . Некоторые другие системы полных остатков по модулю 4 включают:
Некоторые наборы, которые не являются полными системами остатков по модулю 4:
При наличии функции Эйлера φ ( m ) любой набор целых чисел φ ( m ) , которые взаимно просты с m и взаимно неконгруэнтны по модулю m, называется приведенной системой вычетов по модулю m . [5] Например, набор {5, 15} из вышеприведенного примера является примером приведенной системы вычетов по модулю 4.
Покрывающие системы представляют собой еще один тип остаточной системы, которая может содержать остатки с различными модулями.
Замечание: В контексте этого параграфа модуль m почти всегда принимается положительным.
Множество всех классов конгруэнтности по модулю m называется кольцом целых чисел по модулю m , [6] и обозначается , , или . [7] Однако эта нотация не рекомендуется, поскольку ее можно спутать с множеством m -адических целых чисел . Кольцо является основополагающим для различных разделов математики (см. § Приложения ниже).
При m > 0 имеем
При m = 1 — нулевое кольцо ; при m = 0 — не пустое множество ; скорее, оно изоморфно , поскольку a 0 = { a } .
Сложение, вычитание и умножение определяются следующими правилами:
Из приведенных выше свойств следует, что с этими операциями — коммутативное кольцо . Например, в кольце имеем
как в арифметике для 24-часового формата времени.
Обозначение используется потому, что это кольцо является фактор-кольцом по идеалу , множеству, образованному всеми km с
Рассматриваемая как группа по сложению, является циклической группой , и все циклические группы изоморфны для некоторого m . [8]
Кольцо целых чисел по модулю m является полем тогда и только тогда, когда m — простое число (это гарантирует, что каждый ненулевой элемент имеет мультипликативный обратный элемент ). Если m = p k — степень простого числа с k > 1 , то существует единственное (с точностью до изоморфизма) конечное поле с m элементами, которое не изоморфно , которое не является полем, поскольку имеет делители нуля .
Если m > 1 , обозначает мультипликативную группу целых чисел по модулю m , которые обратимы. Она состоит из классов конгруэнтности a m , где a взаимно просто с m ; это как раз те классы, которые обладают мультипликативным обратным. Они образуют абелеву группу относительно умножения; ее порядок равен φ ( m ) , где φ — функция Эйлера
В чистой математике модульная арифметика является одной из основ теории чисел , затрагивая почти каждый аспект ее изучения, а также широко используется в теории групп , теории колец , теории узлов и абстрактной алгебре . В прикладной математике она используется в компьютерной алгебре , криптографии , информатике , химии , а также в изобразительном и музыкальном искусстве.
Очень практичным применением является вычисление контрольных сумм в идентификаторах серийных номеров. Например, Международный стандартный номер книги (ISBN) использует арифметику по модулю 11 (для 10-значного ISBN) или по модулю 10 (для 13-значного ISBN) для обнаружения ошибок. Аналогично, например, Международные номера банковских счетов (IBAN) используют арифметику по модулю 97 для обнаружения ошибок ввода пользователя в номера банковских счетов. В химии последняя цифра номера реестра CAS (уникальный идентификационный номер для каждого химического соединения) является контрольной цифрой , которая вычисляется путем взятия последней цифры первых двух частей номера реестра CAS, умноженного на 1, предыдущей цифры, умноженной на 2, предыдущей цифры, умноженной на 3 и т. д., сложения всех этих цифр и вычисления суммы по модулю 10.
В криптографии модульная арифметика напрямую поддерживает системы открытого ключа , такие как RSA и Диффи–Хеллмана , и обеспечивает конечные поля , которые лежат в основе эллиптических кривых , и используется во множестве алгоритмов симметричного ключа , включая Advanced Encryption Standard (AES), International Data Encryption Algorithm (IDEA) и RC4 . RSA и Диффи–Хеллмана используют модульное возведение в степень .
В компьютерной алгебре модульная арифметика обычно используется для ограничения размера целочисленных коэффициентов в промежуточных вычислениях и данных. Она используется в полиномиальной факторизации , задаче, для которой все известные эффективные алгоритмы используют модульную арифметику. Она используется наиболее эффективными реализациями полиномиального наибольшего общего делителя , точной линейной алгебры и алгоритмов базиса Грёбнера над целыми и рациональными числами. Как было опубликовано на Fidonet в 1980-х годах и заархивировано в Rosetta Code , модульная арифметика была использована для опровержения гипотезы Эйлера о сумме степеней на микрокомпьютере Sinclair QL, используя всего одну четвертую целочисленной точности, используемой суперкомпьютером CDC 6600, чтобы опровергнуть ее два десятилетия назад с помощью поиска методом грубой силы . [9]
В информатике модульная арифметика часто применяется в побитовых операциях и других операциях, включающих циклические структуры данных фиксированной ширины . Операция по модулю, реализованная во многих языках программирования и калькуляторах , является применением модульной арифметики, которое часто используется в этом контексте. Логический оператор XOR суммирует 2 бита по модулю 2.
Использование длинного деления для превращения дроби в периодическую десятичную дробь в любой системе счисления с основанием b эквивалентно модульному умножению b на знаменатель. Например, для десятичной дроби b = 10.
В музыке арифметика по модулю 12 используется при рассмотрении системы двенадцатитоновой равномерной темперации , где имеет место октавная и энгармоническая эквивалентность (то есть высоты тона в соотношении 1:2 или 2:1 эквивалентны, а нота до- диез считается такой же, как и нота ре- бемоль ).
Метод выбрасывания девяток предлагает быструю проверку вычислений десятичных арифметических чисел, выполняемых вручную. Он основан на модульной арифметике по модулю 9, и в частности на решающем свойстве, что 10 ≡ 1 (mod 9).
Арифметика по модулю 7 используется в алгоритмах, которые определяют день недели для заданной даты. В частности, сравнение Целлера и алгоритм Судного дня активно используют арифметику по модулю 7.
В более общем плане модульная арифметика также применяется в таких дисциплинах, как право (например, распределение ), экономика (например, теория игр ) и других областях социальных наук , где пропорциональное разделение и распределение ресурсов играет центральную роль в анализе.
Поскольку модульная арифметика имеет такой широкий спектр приложений, важно знать, насколько сложно решить систему сравнений. Линейная система сравнений может быть решена за полиномиальное время с помощью метода исключения Гаусса , подробности см. в линейной теореме о сравнении . Существуют также алгоритмы, такие как редукция Монтгомери , позволяющие эффективно выполнять простые арифметические операции, такие как умножение и возведение в степень по модулю m , над большими числами.
Некоторые операции, такие как нахождение дискретного логарифма или квадратичного сравнения, кажутся такими же сложными, как факторизация целых чисел , и поэтому являются отправной точкой для криптографических алгоритмов и шифрования . Эти задачи могут быть NP-промежуточными .
Решение системы нелинейных модульных арифметических уравнений является NP-полной задачей . [10]