Русская Википедия:Сравнение по модулю
Шаблон:Falseredirect Сравне́ние двух целых чисел по мо́дулю натурального числа <math>m</math> — математическая операция, позволяющая ответить на вопрос о том, дают ли два выбранных целых числа при делении на <math>m</math> один и тот же остаток. Любое целое число при делении на <math>m</math> дает один из <math>m</math> возможных остатков: число от 0 до <math>m-1</math>; это значит, что все целые числа можно разделить на <math>m</math> групп, каждая из которых отвечает определённому остатку от деления на <math>m</math>. Эти группы называются классами вычетов по модулю <math>m</math>, а содержащиеся в них целые числа — вычетами по модулю <math>m</math>Шаблон:Переход.
Арифметические операции с остатками чисел по фиксированному модулю образуют мо́дульную арифме́тику или модуля́рную арифметику[1][2], которая широко применяется в математике, информатике и криптографии[3].
История
Предпосылкой к созданию теории сравнений стало восстановление сочинений Диофанта, которые были выпущены в подлиннике и с латинским переводом, благодаря Баше де Мезириаку, в 1621 году. Их изучение привело Ферма́ к открытиям, которые по значению существенно опередили своё время. Например, в письме к Шаблон:Нп4[4] 18 октября 1640 года он сообщил без доказательства теорему, впоследствии получившую название малой теоремы Ферма. В современной формулировке теорема утверждает, что если <math>p</math> — простое число и <math>a</math> — целое число, не делящееся на <math>p</math>, то
- <math>a^{p-1}\equiv 1 \pmod p </math> .
Первое доказательство этой теоремы принадлежит Лейбницу, причём он открыл указанную теорему независимо от Ферма́ не позднее 1683 года и сообщил об этом с приведением точного доказательства Бернулли. Кроме этого, Лейбницем был предложен прообраз формулировки теоремы Вильсона.
Позже изучение вопросов, посвященных теории чисел и теории сравнений, было продолжено Эйлером, который ввел квадратичный закон взаимности и обобщил теорему Ферма, установив, что
- <math>a^{\varphi(n)}\equiv 1\pmod n, </math>
где <math>\varphi(n)</math> — функция Эйлера.
Понятие и символьное обозначение сравнений было введено Гауссом, как важный инструмент для обоснования его арифметической теории, работа над которой была начата им в 1797 году. В начале этого периода Гауссу ещё не были известны труды его предшественников, поэтому результаты его работы, изложенные в первых трёх главах его книги «Арифметические исследования» (1801 год), были в основном уже известны, однако методы, которые он использовал для доказательств, оказались абсолютно новыми, имеющими высшую важность для развития теории чисел. Используя эти методы, Гаусс преобразовал все накопленные до него сведения, связанные с операциями сравнения по модулю, в стройную теорию, которая впервые была изложена в этой же книге. Кроме этого, он исследовал сравнения первой и второй степени, теорию квадратичных вычетов и связанный с ней квадратичный закон взаимности[5].
Определения
Шаблон:Рамка Если два целых числа <math>a</math> и <math>b</math> при делении на <math>m</math> дают одинаковые остатки, то они называются сравнимыми (или равноостаточными) по модулю числа <math>m</math>[6]. Шаблон:Конец рамки Сравнимость чисел <math>a</math> и <math>b</math> записывается в виде формулы (сравнения):
- <math>a \equiv b \pmod m .</math>
Число <math>m</math> называется модулем сравнения.
Определение сравнимости чисел <math>a</math> и <math>b</math> по модулю <math>m</math> равносильно любому из следующих утверждений:
- разность чисел <math>a</math> и <math>b</math> делится на <math>m</math> без остатка;
- число <math>a</math> может быть представлено в виде <math>a = b + k \cdot m</math>, где <math>k</math> — некоторое целое число[7].
Например, числа 32 и −10 сравнимы по модулю 7, так как оба числа при делении на 7 дают остаток 4:
- <math>32 = 7 \cdot 4 + 4;</math>
- <math> -10 = 7 \cdot (-2) + 4.</math>
Также числа 32 и -10 сравнимы по модулю 7, так как их разность <math>32-(-10)=42</math> делится на 7 и к тому же имеет место представление
- <math>32 = 6 \cdot 7 + (-10) .</math>
Свойства сравнимости по модулю
Для фиксированного натурального числа <math>m</math> отношение сравнимости по модулю <math>m</math> обладает следующими свойствами:
- свойством рефлексивности: для любого целого <math>a</math> справедливо <math>a \equiv a \pmod m ;</math>
- свойством симметричности: если <math>a \equiv b \pmod m,</math> то <math>b \equiv a \pmod m ;</math>
- свойством транзитивности: если <math>a \equiv b \pmod m</math> и <math>b \equiv c \pmod m,</math> то <math>a \equiv c \pmod m.</math>
Таким образом, отношение сравнимости по модулю <math>m</math> является отношением эквивалентности на множестве целых чиселШаблон:Sfn.
Кроме вышеперечисленных свойств, для сравнений справедливы следующие утверждения:
- любые два целых числа сравнимы по модулю 1;
- если числа <math>a</math> и <math>b</math> сравнимы по модулю <math>m</math>, и число <math>d</math> является делителем <math>m</math>, то <math>a</math> и <math>b</math> сравнимы по модулю <math>d</math>;
- если числа <math>a</math> и <math>b</math> сравнимы по <math>k</math> модулям <math>{m_1, m_2, ..., m_k} ,</math> то они сравнимы по модулю, равному наименьшему общему кратному модулей <math>{m_1, m_2, ..., m_k}</math>.
- Следствие:
- Для того, чтобы числа <math>a</math> и <math>b</math> были сравнимы по модулю <math>m</math>, каноническое разложение на простые сомножители которого имеет вид
- <math>m = \prod_{i=1}^d p_i^{\alpha_i},</math>
необходимо и достаточно, чтобы
- <math>a \equiv b \pmod {p_i^{\alpha_i}},</math> где <math> i = 1, 2, \ldots, d</math>Шаблон:Sfn.
Операции со сравнениями
Сравнения по одному и тому же модулю обладают многими свойствами обычных равенств. Например, их можно складывать, вычитать и перемножать: если числа <math>a_1, a_2, \ldots, a_n</math> и <math>b_1, b_2, \ldots, b_n</math> попарно сравнимы по модулю <math>m</math>, то их суммы <math>a_1 + a_2 + \ldots + a_n</math> и <math>b_1 + b_2 + \ldots + b_n</math>, а также произведения <math>a_1 \cdot a_2 \cdot ... \cdot a_n</math> и <math>b_1 \cdot b_2 \cdot ... \cdot b_n</math> тоже сравнимы по модулю <math>m</math>:
- <math> ( a_1 + a_2 + \ldots + a_n ) \equiv ( b_1 + b_2 + \ldots + b_n ) \pmod m ;</math>
- <math> ( a_1 \cdot a_2 \cdot \ldots \cdot a_n ) \equiv ( b_1 \cdot b_2 \cdot \ldots \cdot b_n ) \pmod m .</math>
При этом нельзя выполнять эти операции со сравнениями, если их модули не совпадаютШаблон:Sfn.
К обеим частям сравнения можно прибавить одно и то же число <math>c</math>:
- <math> ( a + c ) \equiv ( b + c ) \pmod m .</math>
Также можно перенести число из одной части сравнения в другую со сменой знака:
- <math> a \equiv ( b + c ) \pmod m ;</math>
- <math> ( a - c ) \equiv b \pmod m .</math>
Если числа <math>a</math> и <math>b</math> сравнимы по модулю <math>m</math>, то их степени <math>a^k</math> и <math>b^k</math> тоже сравнимы по модулю <math>m</math> при любом натуральном <math>k</math>[7]:
- <math> a^k \equiv b^k \pmod m .</math>
K любой из частей сравнения можно прибавить целое число, кратное модулю, то есть, если числа <math>a</math> и <math>b</math> сравнимы по модулю некоторого числа <math>m</math>, то и <math>a + t_1</math> сравнимо с <math>b + t_2</math> по модулю <math>m</math>, где <math>t_1</math> и <math>t_2</math> — произвольные целые числа, кратные <math>m</math>:
- <math> ( a + t_1 ) \equiv ( b + t_2 ) \pmod m .</math>
Также обе части сравнения и модуль можно умножить на одно и то же число, то есть, если числа <math>a</math> и <math>b</math> сравнимы по модулю некоторого целого числа <math>m</math>, то и числа <math>aq</math> и <math>bq</math> сравнимы по модулю числа <math>mq</math>, где <math>q</math> — целое:
- <math> a q \equiv b q \pmod { m q } .</math>
Сравнения, однако, нельзя, вообще говоря, делить друг на друга или на другие числа. Пример: <math>14 \equiv 20 \pmod 6</math>, однако, сократив в 2 раза, мы получаем ошибочное сравнение: <math>7 \equiv 10 \pmod 6</math>. Правила сокращения для сравнений следующие.
- Можно делить обе части сравнения на число, но только взаимно простое с модулем: если
- <math> {ad} \equiv {bd} \pmod m</math> и НОД<math>{(d,m)=1},</math> то
- <math>a \equiv b \pmod m</math>.
Если, число <math>d</math> не взаимно просто с модулем, как было в примере, указанном выше, то сокращать на <math>d</math> нельзя.
- Можно одновременно разделить обе части сравнения и модуль на их общий делитель:
если <math>{ac} \equiv {bc} \pmod {mc}</math>, то <math>a \equiv b \pmod m</math>Шаблон:Sfn.
Пример
Применение сравнений позволяет легко получать разнообразные признаки делимости. Например, выведем признак делимости натурального числа N на 7. Запишем <math>N</math> в виде <math>10a+b</math> (то есть отделим цифру единиц). Условие, что <math>N</math> делится нацело на 7, можно записать в виде: <math>10a+b \equiv 0 \pmod 7.</math> Умножим это сравнение на <math>-2:</math>
- <math>-20a-2b \equiv 0 \pmod 7.</math>
Или, прибавив слева число <math>21a,</math> кратное модулю:
- <math>a-2b \equiv 0 \pmod 7.</math>
Отсюда вытекает следующий признак делимости на 7: надо вычесть из числа десятков удвоенное число единиц, затем повторять эту операцию до тех пор, пока не получится двузначное или однозначное число; если оно делится на 7, то и исходное число делится. Например, пусть <math>N=22624.</math> Алгоритм проверкиШаблон:Sfn:
- <math>N_1=2262 - 2\cdot 4 = 2254;\ N_2 = 225 - 2\cdot 4 = 217; N_3 = 21 - 2\cdot 7 = 7</math>
Вывод: 22624 делится на 7.
Связанные определения
Классы вычетов
Множество всех чисел, сравнимых с <math>a</math> по модулю <math>m</math>, называется классом вычетов <math>a</math> по модулю <math>m</math>, и обычно обозначается <math>[a]_m</math> или <math>\bar a_m</math>. Таким образом, сравнение <math>a\equiv b\pmod{m}</math> равносильно равенству классов вычетов <math>[a]_m=[b]_m</math>[8].
Любое число класса вычетов называется вычетом по модулю <math>m</math>. Пусть для определённости <math>r</math> ― остаток от деления любого из представителей выбранного класса на <math>m</math>, тогда любое число <math>q</math> из этого класса вычетов можно представить в виде <math>q = mt + r</math>, где <math>t</math> — целое. Вычет, равный остатку <math>r</math> (<math>q = r</math> при <math> t = 0</math>) называется наименьшим неотрицательным вычетом, а вычет <math>\rho</math> (<math>q = \rho</math>), самый малый по абсолютной величине, называется абсолютно наименьшим вычетом. При <math>r < \frac {m}{2}</math> получаем, что <math>\rho = r</math>, в противном случае <math>\rho = r - m</math>. Если <math>m</math> — чётное и <math>r = \frac{m}{2}</math>, то <math>\rho = -\frac{m}{2}</math>Шаблон:Sfn.
Поскольку сравнимость по модулю <math>m</math> является отношением эквивалентности на множестве целых чисел <math>\mathbb{Z}</math>, то классы вычетов по модулю <math>m</math> представляют собой классы эквивалентности; их количество равно <math>m</math>.
Множество всех классов вычетов по модулю <math>m</math> обозначается <math>\mathbb{Z}_m</math> или <math>\mathbb{Z}/m\mathbb{Z}</math>Шаблон:Sfn или <math>\mathbb{Z}/(m)</math>[9].
Операции сложения и умножения на <math>\mathbb{Z}</math> индуцируют соответствующие операции на множестве <math>\mathbb{Z}_m</math>:
- <math>[a]_m + [b]_m = [ a + b ]_m ;</math>
- <math>[a]_m \cdot [b]_m = [ a \cdot b ]_m .</math>
Относительно этих операций множество <math>\mathbb{Z}_m</math> является конечным кольцом, а для простого <math>m</math> — конечным полем[6].
Системы вычетов
Система вычетов позволяет осуществлять арифметические операции над конечным набором чисел, не выходя за его пределы. Полная система вычетов по модулю <math>m</math> ― любой набор из <math>m</math> попарно несравнимых по модулю <math>m</math> целых чисел. Обычно в качестве полной системы вычетов по модулю <math>m</math> берётся одно из двух множеств:
- наименьшие неотрицательные вычеты, то есть числа:
- <math>0, 1, \ldots , m-1</math>
- или абсолютно наименьшие вычеты, состоящие в случае нечётного <math>m</math> из чисел
- <math>0,\pm1,\pm2,\ldots,\pm\frac{m-1}{2}</math>,
- и в случае чётного <math>m</math> из чисел
- <math>0,\pm1,\pm2,\ldots,\pm\left(\frac{m}{2}-1\right),-\frac{m}{2}</math>
Максимальный набор попарно несравнимых по модулю <math>m</math> чисел, взаимно простых с <math>m</math>, называется приведённой системой вычетов по модулю <math>m</math>. Всякая приведённая система вычетов по модулю <math>m</math> содержит <math>\varphi(m)</math> элементов, где <math>\varphi(\cdot)</math> — функция ЭйлераШаблон:Sfn.
Например, для числа <math>m=42</math> полная система вычетов может быть представлена числами 0, 1, 2, 3, …, 21, 22, 23, …, 39, 40, 41, а приведённая — 1, 5, 11, 13, 17, 19, 23, 25, 29, 31, 37, 41.
Сравнения в кольце многочленов над полем
Рассматривается кольцо многочленов <math>K[x]</math> над полем <math>K</math>. Два многочлена <math>g_1</math> и <math>g_2</math>, принадлежащие выбранному кольцу, называются сравнимыми по модулю многочлена <math>f</math>, если их разность <math>g_1-g_2</math> делится на <math>f</math> без остатка. Сравнение обозначается следующим образом:
- <math>g_1 \equiv g_2 \pmod f.</math>
Так же, как и в кольце целых чисел, такие сравнения можно складывать, вычитать и перемножать[10].
Решение сравнений
Сравнения первой степени
В теории чисел, криптографии и других областях науки часто возникает задача поиска решений сравнения первой степени вида
- <math>a \cdot x \equiv b \pmod m .</math>
Решение такого сравнения начинается с вычисления <math>d = </math> НОД<math>(a,m)</math>. При этом возможны два случая:
- если <math>b</math> не кратно <math>d</math>, то у сравнения нет решений;
- если <math>b</math> кратно <math>d</math>, то у сравнения существует единственное решение по модулю <math>\frac{m}{d}</math>, или, что то же самое, <math>d</math> решений по модулю <math>m</math>. В этом случае в результате сокращения исходного сравнения на <math>d</math> получается сравнение:
- <math>a_1 x \equiv b_1 \pmod { m_1 } ,</math>
- где <math>a_1 = \frac{a}{d} ,</math> <math>b_1 = \frac{b}{d}</math> и <math>m_1 = \frac{m}{d}</math> являются целыми числами, причём <math>a_1</math> и <math>m_1</math> взаимно просты. Поэтому число <math>a_1</math> можно обратить по модулю <math>m_1</math>, то есть найти такое число <math>c</math>, что <math>c \cdot a_1 \equiv 1 \pmod { m_1 }</math> (другими словами, <math>c \equiv a_1^{-1} \pmod { m_1 }</math>). Теперь решение находится умножением полученного сравнения на <math>c</math>:
- <math>x \equiv c a_1 x \equiv c b_1 \equiv a_1^{-1} b_1 \pmod { m_1 }.</math>
Практическое вычисление значения <math>c</math> можно осуществить разными способами: с помощью теоремы Эйлера, алгоритма Евклида, теории цепных дробей (см. алгоритм) и др. В частности, теорема Эйлера позволяет записать значение <math>c</math> в виде:
- <math>c \equiv a_1^{-1} \equiv a_1^{ \varphi(m_1) - 1 } \pmod {m_1}</math>Шаблон:Sfn.
Примеры
Пример 1. Для сравнения
- <math>6x \equiv 26 \pmod {22}</math>
имеем <math>d=2</math>, поэтому по модулю 22 сравнение имеет два решения. Заменим 26 на 4, сравнимое с ним по модулю 22, и затем сократим все три числа на 2:
- <math>3x \equiv 2\pmod {11}</math>
Поскольку 3 взаимно просто с модулем 11, то его можно обратить по модулю 11 и найти
- <math>3^{-1}\equiv 4\pmod{11}</math>.
Умножая сравнение на 4, получаем решение по модулю 11:
- <math>x\equiv 8\pmod {11}</math>,
эквивалентное совокупности двух решений по модулю 22:
- <math>x\equiv 8\pmod {22}</math> и <math>x\equiv 19\pmod {22}</math>.
Пример 2. Дано сравнение:
- <math>100 x \equiv 41\pmod {65537}.</math> Отметим, что модуль <math>65537</math> — простое число.
Первый способ решения — воспользоваться соотношением Безу. С помощью алгоритма Евклида или программы, приведенной в статье о соотношении Безу, находим, что это соотношение для чисел <math>100</math> и <math>65537</math> имеет вид:
- <math> 17695 \cdot 100 + (-27) \cdot 65537 = 1,</math> или <math>17695 \cdot 100 \equiv 1 \pmod {65537}</math>
Умножив обе части этого сравнения на 41, получим:
- <math>100 \cdot 725495 \equiv 41 \pmod {65537}</math>
Отсюда следует, что <math>725495</math> есть решение исходного сравнения. Удобнее заменить его на сравнимое с ним <math>4588</math> (остаток от деления <math>725495</math> на <math>65537</math>). Ответ: <math>x \equiv 4588 \pmod {65537}.</math>
Второй способ решения, более простой и быстрый, не требует построения соотношения Безу, но также эквивалентен алгоритму Евклида.
Шаг 1. Делим модуль на коэффициент при x с остатком: <math>65537=100 \cdot 655+37</math>. Умножим обе части исходного сравнения на частное <math>655</math> и прибавим <math>37x</math>; получим: <math>65537x \equiv 26855+37x \pmod {65537}</math>, но левая часть кратна <math>65537</math>, то есть сравнима с нулём, откуда:
- <math>37x \equiv -26855 \pmod {65537}</math>
Мы получили при <math>x</math> коэффициент 37 вместо 100. На каждом следующем шаге уменьшаем аналогично, пока не получим единицу.
Шаг 2. Аналогично делим на новый коэффициент при x: <math>65537=37 \cdot 1771+10</math>. Умножим обе части сравнения, полученного в предыдущем шаге, на частное <math>1771</math> и прибавим <math>10x</math>; снова заменив левую часть на ноль, получим:
- <math>10x \equiv 47560205 \pmod {65537}</math>
<math>47560205</math> заменяем на его остаток при делении на <math>65537,</math> равный <math>45880</math>:
- <math>10x \equiv 45880 \pmod {65537}</math>
Далее можно было бы сделать аналогично ещё 5 шагов, но проще разделить обе части сравнения на 10 и сразу получить результат: <math>x \equiv 4588 \pmod {65537}.</math>
Сравнения второй степени
Сравнения второй степени по простому модулю Шаблон:Math имеет следующий общий вид:
- <math>c_0x^2+c_1x+c \equiv 0\pmod {m}.</math>
Это выражение можно привести к виду
- <math>(x+b)^2\equiv a\pmod {m},</math>
а при замене <math>z = x+ b</math> упрощается до
- <math>z^2\equiv a\pmod {m}.</math>
Решение этого сравнения сводится к выяснению, является ли данное число квадратичным вычетом (с помощью квадратичного закона взаимности) и последующему вычислению квадратного корня по данному модулю[11]. Для вычисления квадратного корня из квадратичного вычета существует вероятностный метод Берлекэмпа и детерминированный алгоритм Тонелли — Шенкса.
Системы сравнений
Шаблон:Main Китайская теорема об остатках утверждает, что система сравнений с попарно взаимно простыми модулями <math>m_1, m_2, \ldots, m_n</math>:
- <math>\begin{cases}
x \equiv a_1 \pmod {m_1}\\ x \equiv a_2 \pmod {m_2}\\
\ldots \\
x \equiv a_n \pmod {m_n} \end{cases}</math> всегда разрешима, и её решение единственно по модулю <math>m_1 \cdot m_2 \cdot\ldots\cdot m_n</math>.
Другими словами, китайская теорема об остатках утверждает, что кольцо вычетов по модулю произведения нескольких попарно взаимно простых чисел является прямым произведением соответствующих множителям колец вычетов.
Применение
Модульная арифметика используются в теории чисел, теории групп, теории колец, теории узлов, общей алгебре, криптографии, информатике, химии и других областях.
Например, сравнения часто применяются для вычисления контрольных сумм, используемых в идентификаторах. Так, для определения ошибок при вводе международного номера банковского счета используется сравнение по модулю 97[12].
В криптографии сравнения можно встретить в системах с открытым ключом, использующих, например, алгоритм RSA или протокол Диффи — Хеллмана. Также, модульная арифметика обеспечивает конечные поля, над которыми затем строятся эллиптические кривые, и используется в различных протоколах с симметричным ключом (AES, IDEA)[13].
В химии последняя цифра в регистрационном номере CAS является значением контрольной суммы, которая вычисляется путём сложения последней цифры номера, умноженной на 1, второй справа цифры, умноженной на 2, третьей, умноженной на три и так далее до первой слева цифры, завершаясь вычислением остатка от деления на 10[14]
См. также
- Сложение по модулю 2
- Возведение в степень по модулю
- Показатель числа по модулю
- Алгоритмы быстрого возведения в степень по модулю
Примечания
Литература
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Статья
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Cite web
- Шаблон:Книга
- Шаблон:Source
- Шаблон:Книга
- ↑ Шаблон:Книга
- ↑ Шаблон:Cite web
- ↑ Шаблон:Статья
- ↑ Французский математик, член французской академии наук с 1666.
- ↑ Шаблон:Книга Шаблон:Wayback
- ↑ 6,0 6,1 Шаблон:Книга Шаблон:Wayback
- ↑ 7,0 7,1 Шаблон:Книга Шаблон:Wayback
- ↑ Шаблон:Книга Шаблон:Wayback
- ↑ Шаблон:Книга
- ↑ Шаблон:Книга
- ↑ Шаблон:Книга Шаблон:Wayback
- ↑ Шаблон:Книга
- ↑ Шаблон:Книга
- ↑ Шаблон:Cite web