Модульная арифметика - Modular arithmetic

Для хронометража на этих часах используется арифметика по модулю 12.

В математика, модульная арифметика это система арифметика за целые числа, где числа "переходят" при достижении определенного значения, называемого модуль. Современный подход к модульной арифметике был разработан Карл Фридрих Гаусс в его книге Disquisitiones Arithmeticae, опубликовано в 1801 г.

Знакомое использование модульной арифметики находится в 12-часовой формат, в котором день разделен на два 12-часовых периода. Если сейчас 7:00, то через 8 часов будет 3:00. Простое добавление приведет к 7 + 8 = 15, но часы "переключаются" каждые 12 часов. Поскольку число часов начинается заново после достижения 12, это арифметика. по модулю 12. Согласно приведенному ниже определению, 15 - это конгруэнтный до 3 по модулю 12, поэтому "15:00" на 24-часовые часы отображается «3:00» в 12-часовом формате.

Конгруэнтность

Учитывая целое число п > 1, называется модуль, два целых числа называются конгруэнтный по модулю п, если п это делитель их разности (т. е. если существует целое число k такой, что аб = кн).

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

Скобки означают, что (мод п) применяется ко всему уравнению, а не только к правой части (здесь б). Это обозначение не следует путать с обозначением б мод п (без скобок), что относится к операция по модулю. В самом деле, б мод п обозначает уникальное целое число а такой, что 0 ≤ а < п и (т.е. оставшаяся часть при делении на [1]).

Отношение конгруэнтности можно переписать как

явно показывая свою связь с Евклидово деление. Тем не менее б здесь не должно быть остатка от деления а к п. Вместо этого, что заявление аб (мод п) утверждает, что а и б имеют тот же остаток при делении на п. То есть,

куда 0 ≤ р < п - общий остаток. Вычитая эти два выражения, мы восстанавливаем предыдущее соотношение:

установив k = пq.

Примеры

По модулю 12 можно утверждать, что:

потому что 38 − 14 = 24, который кратен 12. Другой способ выразить это - сказать, что и 38, и 14 имеют одинаковый остаток 2 при делении на 12.

Определение конгруэнтности также применимо к отрицательным значениям. Например:

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

Отношение конгруэнтности удовлетворяет всем условиям отношение эквивалентности:

  • Рефлексивность: аа (мод п)
  • Симметрия: аб (мод п) если ба (мод п) для всех а, б, и п.
  • Транзитивность: если аб (мод п) и бc (мод п), тогда аc (мод п)

Если а1б1 (мод п) и а2б2 (мод п), или если аб (мод п), тогда:

  • а + kб + k (мод п) для любого целого k (совместимость с переводом)
  • к ак б (мод п) для любого целого k (совместимость с масштабированием)
  • а1 + а2б1 + б2 (мод п) (совместимость с дополнением)
  • а1а2б1б2 (мод п) (совместимость с вычитанием)
  • а1 а2б1 б2 (мод п) (совместимость с умножением)
  • аkбk (мод п) для любого неотрицательного целого числа k (совместимость с возведением в степень)
  • п(а) ≡ п(б) (мод п), для любого многочлен п(Икс) с целыми коэффициентами (совместимость с полиномиальной оценкой)

Если аб (мод п), то обычно неверно, что kаkб (мод п). Однако верно следующее:

Для отмены общих условий у нас действуют следующие правила:

  • Если а + kб + k (мод п), куда k любое целое число, то аб (мод п)
  • Если к ак б (мод п) и k взаимно прост с п, тогда аб (мод п)
  • Если к ак б (мод кн) , тогда аб (мод п)

В модульный мультипликативный обратный определяется следующими правилами:

  • Существование: существует целое число, обозначенное а–1 такой, что аа–1 ≡ 1 (мод п) если и только если а взаимно прост с п. Это целое число а–1 называется модульный мультипликативный обратный из а по модулю п.
  • Если аб (мод п) и а–1 существует, тогда а–1б–1 (мод п) (совместимость с мультипликативным обратным, и, если а = б, уникальность по модулю п)
  • Если а хб (мод п) и а взаимно прост с п, то решение этого линейного сравнения дается формулой Икса–1б (мод п)

Мультипликативный обратный Икса–1 (мод п) может быть эффективно вычислен путем решения Уравнение Безу за -с использованием Расширенный алгоритм Евклида.

В частности, если п простое число, то а взаимно прост с п для каждого а такой, что 0 < а < п; таким образом, мультипликативный обратный существует для всех а это не конгруэнтно нулю по модулю п.

Некоторые из наиболее продвинутых свойств отношений конгруэнтности следующие:

  • Маленькая теорема Ферма: Если п простое и не делит а, тогда а п – 1 ≡ 1 (мод п).
  • Теорема Эйлера: Если а и п взаимно просты, то а φ(п) ≡ 1 (мод п), куда φ является Функция Эйлера
  • Простое следствие малой теоремы Ферма состоит в том, что если п простое, то а−1а п − 2 (мод п) является мультипликативным обратным к 0 < а < п. В более общем смысле, из теоремы Эйлера, если а и п взаимно просты, то а−1а φ(п) − 1 (мод п).
  • Еще одно простое следствие: если аб (мод φ(п)), куда φ - функция Эйлера, то kаkб (мод п) при условии k является совмещать с п.
  • Теорема Вильсона: п прост тогда и только тогда, когда (п - 1)! ≡ −1 (mod п).
  • Китайская теорема об остатках: Для любого а, б и coprime м, п, существует единственный Икс (мод млн) такой, что Икса (мод м) и Иксб (мод п). Фактически, Иксб мп–1 м + а нм–1 п (мод млн) куда мп−1 является инверсией м по модулю п и пм−1 является инверсией п по модулю м.
  • Теорема Лагранжа: Соответствие ж (Икс) ≡ 0 (мод. п), куда п простое, и ж (Икс) = а0 Иксп + ... + ап это многочлен с целыми коэффициентами такими, что а0 ≠ 0 (мод п), имеет не более п корни.
  • Примитивный корень по модулю n: Число грамм примитивный корень по модулю п если для каждого целого числа а взаимно простой с п, есть целое число k такой, что граммkа (мод п). Примитивный корень по модулю п существует тогда и только тогда, когда п равно 2, 4, пk или же 2пk, куда п нечетное простое число и k положительное целое число. Если примитивный корень по модулю п существует, то есть ровно φ(φ(п)) такие первобытные корни, где φ - функция Эйлера.
  • Квадратичный остаток: Целое число а квадратичный вычет по модулю п, если существует целое число Икс такой, что Икс2а (мод п). Критерий Эйлера утверждает, что если п - нечетное простое число, и а не является кратным п, тогда а квадратичный вычет по модулю п если и только если

Классы конгруэнтности

Как и любое отношение конгруэнтности, сравнение по модулю п является отношение эквивалентности, а класс эквивалентности целого числа а, обозначаемый ап, это множество {… , а − 2п, ап, а, а + п, а + 2п, …}. Этот набор, состоящий из всех целых чисел, конгруэнтных а по модулюп, называется класс конгруэнтности, класс остатка, или просто остаток целого числа а по модулюп. Когда модуль п известно из контекста, этот остаток также может быть обозначен [а].

Системы остатков

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

Набор целых чисел {0, 1, 2, …, п − 1} называется система наименьших остатков по модулю п. Любой набор п целые числа, никакие два из которых не совпадают по модулю п, называется полная система остатков по модулю п.

Система наименьших остатков - это полная система остатков, а полная система остатков - это просто набор, содержащий ровно одного представителя каждого класса остатков по модулю п.[4] Например. система наименьших вычетов по модулю 4 равна {0, 1, 2, 3}. Некоторые другие полные системы остатков по модулю 4 включают:

  • {1, 2, 3, 4}
  • {13, 14, 15, 16}
  • {−2, −1, 0, 1}
  • {−13, 4, 17, 18}
  • {−5, 0, 6, 21}
  • {27, 32, 37, 42}

Некоторые наборы, которые нет Полные системы остатков по модулю 4:

  • {−5, 0, 6, 22}, поскольку 6 сравнимо с 22 по модулю 4.
  • {5, 15}, поскольку полная система вычетов по модулю 4 должна иметь ровно 4 инконгруэнтных класса вычетов.

Системы с пониженным остатком

Учитывая Функция Эйлера φ (п), любой набор φ (п) целые числа, которые относительно простой к п и взаимно несовместимы по модулю п называется система приведенных остатков по модулю п.[5] Набор {5,15} из приведенного выше, например, является примером системы приведенных остатков по модулю 4.

Целые числа по модулю п

Набор всех классы конгруэнтности целых чисел для модуля п называется кольцо целых чисел по модулю п,[6] и обозначается , , или же .[1][7] Обозначение однако не рекомендуется, поскольку его можно спутать с набором п-адические целые числа. Кольцо лежит в основе различных разделов математики (см. § Приложения ниже).

Набор определен для п > 0 как:

(Когда п = 0, не является пустой набор; скорее, это изоморфный к , поскольку а0 = {а}.)

Мы определяем сложение, вычитание и умножение на по следующим правилам:

Для проверки правильности этого определения используются приведенные ранее свойства.

Таким образом, становится коммутативное кольцо. Например, на ринге , у нас есть

как в арифметике для 24-часовых часов.

Мы используем обозначения потому что это кольцо частного из посредством идеальный , набор, содержащий все целые числа, делящиеся на п, куда это одноэлементный набор {0}. Таким образом это поле когда это максимальный идеал (т.е. когда п простое).

Это также можно построить из группы только при операции сложения. Остаточный класс ап это группа смежный из а в факторгруппа , а циклическая группа.[8]

Вместо того, чтобы исключать особый случай п = 0, полезнее включить (которое, как упоминалось ранее, изоморфно кольцу целых чисел). Фактически, это включение полезно при обсуждении характеристика из звенеть.

Кольцо целых чисел по модулю п это конечное поле если и только если п является основной (это гарантирует, что каждый ненулевой элемент имеет мультипликативный обратный ). Если это основная сила с k > 1 существует единственное (с точностью до изоморфизма) конечное поле с п элементы, но это нет , который не может быть полем, потому что делители нуля.

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

Приложения

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

Очень практичное приложение - вычисление контрольных сумм в идентификаторах серийных номеров. Например, Международный стандартный номер книги (ISBN) использует арифметику по модулю 11 (для 10-значного ISBN) или по модулю 10 (для 13-значного ISBN) для обнаружения ошибок. Так же, Номера международных банковских счетов (IBAN), например, используют арифметику по модулю 97 для выявления ошибок ввода пользователем в номерах банковских счетов. В химии последняя цифра Регистрационный номер CAS (уникальный идентификационный номер для каждого химического соединения) - это контрольная цифра, который рассчитывается как последняя цифра первых двух частей Регистрационный номер CAS умножить на 1, предыдущую цифру умножить на 2, предыдущую цифру умножить на 3 и т. д., сложив все это и вычислив сумму по модулю 10.

В криптографии модульная арифметика напрямую лежит в основе открытый ключ такие системы как ЮАР и Диффи – Хеллмана, и предоставляет конечные поля которые лежат в основе эллиптические кривые, и используется в различных алгоритмы с симметричным ключом включая Расширенный стандарт шифрования (AES), Международный алгоритм шифрования данных (IDEA) и RC4. RSA и Диффи – Хеллмана используют модульное возведение в степень.

В компьютерной алгебре модульная арифметика обычно используется для ограничения размера целочисленных коэффициентов в промежуточных вычислениях и данных. Он используется в полиномиальная факторизация, проблема, для которой все известные эффективные алгоритмы используют модульную арифметику. Он используется наиболее эффективными реализациями полиномиальный наибольший общий делитель, точный линейная алгебра и Основа Грёбнера алгоритмы над целыми и рациональными числами. Как размещено на Фидонет в 1980-х и архивировано в Код Розетты, модульная арифметика использовалась для опровержения Гипотеза Эйлера о сумме степеней на Sinclair QL микрокомпьютер используя только четверть целочисленной точности, используемой CDC 6600 суперкомпьютер чтобы опровергнуть это двумя десятилетиями ранее с помощью поиск грубой силы.[9]

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

В музыке арифметика по модулю 12 используется при рассмотрении системы двенадцатитонный ровный темперамент, куда октава и энгармонический возникает эквивалентность (то есть, высота звука в соотношении 1∶2 или 2∶1 эквивалентна, а C-острый считается так же, как D-плоский ).

Методика выбросить девятки предлагает быструю проверку десятичных арифметических вычислений, выполняемых вручную. Он основан на модульной арифметике по модулю 9 и, в частности, на ключевом свойстве 10 ≡ 1 (mod 9).

Арифметика по модулю 7 используется в алгоритмах, которые определяют день недели для заданной даты. Особенно, Конгруэнтность Целлера и Алгоритм судного дня активно использовать арифметику по модулю 7.

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

Вычислительная сложность

Поскольку модульная арифметика имеет такой широкий спектр приложений, важно знать, насколько сложно решить систему сравнений. Линейная система сравнений может быть решена в полиномиальное время с формой Гауссово исключение, подробнее см. теорема линейного сравнения. Алгоритмы, такие как Редукция Монтгомери, также существуют для выполнения простых арифметических операций, таких как умножение и возведение в степень по модулюп, чтобы эффективно работать с большими числами.

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

Решение системы нелинейных модульных арифметических уравнений есть НП-полный.[10]

Примеры реализации

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

Алгоритмический способ вычисления :[11]

uint64_t mul_mod(uint64_t а, uint64_t б, uint64_t м){   если (!((а | б) & (0xFFFFFFFFULL << 32)))       возвращаться а * б % м;   uint64_t d = 0, mp2 = м >> 1;   int я;   если (а >= м) а %= м;   если (б >= м) б %= м;   за (я = 0; я < 64; ++я)   {       d = (d > mp2) ? (d << 1) - м : d << 1;       если (а & 0x8000000000000000ULL)           d += б;       если (d >= м) d -= м;       а <<= 1;   }   возвращаться d;}

На компьютерных архитектурах, где повышенная точность доступен формат мантиссы не менее 64 бит (например, длинный двойной тип большинства компиляторов x86 C) следующая процедура[требуется разъяснение ], используя уловку, которая аппаратно плавающая точка умножение приводит к сохранению наиболее значимых битов продукта, тогда как целочисленное умножение приводит к сохранению наименее значимых битов:[нужна цитата ]

uint64_t mul_mod(uint64_t а, uint64_t б, uint64_t м){   длинный двойной Икс;   uint64_t c;   int64_t р;   если (а >= м) а %= м;   если (б >= м) б %= м;   Икс = а;   c = Икс * б / м;   р = (int64_t)(а * б - c * м) % (int64_t)м;   возвращаться р < 0 ? р + м : р;}

Ниже приведена функция C для выполнения модульного возведения в степень, которая использует mul_mod функция реализована выше.

Алгоритмический способ вычисления :

uint64_t pow_mod(uint64_t а, uint64_t б, uint64_t м){    uint64_t р = м==1?0:1;    пока (б > 0) {        если (б & 1)            р = mul_mod(р, а, м);        б = б >> 1;        а = mul_mod(а, а, м);    }    возвращаться р;}

Однако, чтобы все вышеперечисленные процедуры работали, м не должен превышать 63 бит.

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

Примечания

  1. ^ а б «Исчерпывающий список символов алгебры». Математическое хранилище. 2020-03-25. Получено 2020-08-12.
  2. ^ Вайсштейн, Эрик В. «Модульная арифметика». mathworld.wolfram.com. Получено 2020-08-12.
  3. ^ Петтофреццо и Биркит (1970, п. 90)
  4. ^ Длинный (1972 г., п. 78)
  5. ^ Длинный (1972 г., п. 85)
  6. ^ Это звенеть, как показано ниже.
  7. ^ «2.3: Целые числа по модулю n». Математика LibreTexts. 2013-11-16. Получено 2020-08-12.
  8. ^ Сенгадир Т., Дискретная математика и комбинаторика, п. 293, в Google Книги
  9. ^ "Гипотеза Эйлера о сумме степеней". rosettacode.org. Получено 2020-11-11.
  10. ^ Garey, M. R .; Джонсон, Д. С. (1979). Компьютеры и непреодолимость, руководство по теории NP-полноты. В. Х. Фриман. ISBN  0716710447.
  11. ^ Этот код использует буквальную нотацию C для длинных длинных шестнадцатеричных чисел без знака, которые заканчиваются на ULL. См. Также раздел 6.4.4 спецификации языка. n1570.

Рекомендации

внешняя ссылка