Китайская теорема об остатках
Введение и историческая справка
Китайская теорема об остатках — одно из фундаментальных утверждений теории чисел, которое описывает способ одновременного решения нескольких сравнений по модулю. Зародившись в древнем Китае (работа, приписываемая Сунь-цзы), теорема получила современное строгое формулирование в работах европейских математиков и стала базовым инструментом в теории вычетов.
Простейший иллюстративный пример выглядит так: . Этот пример показывает идею: для некоторых наборов модулей и остатков можно найти целое число, дающее заданные остатки при делении на эти модули.
Определения и основные понятия
Сравнение по модулю - выражение вида , которое говорит, что числа a и b дают одинаковый остаток при делении на n.
Модуль - положительное целое число n, относительно которого определяется сравнение по модулю; модуль задаёт класс эквивалентности для целых чисел.
Независимые (взаимно простые) модули - два модуля m и n называются взаимно простыми, если .
Класс вычетов - множество чисел, дающих при делении на модуль одинаковый остаток; обычно обозначается через остаток a и модуль n.
Формулировка теоремы
Рассмотрим систему сравнений вида . Китайская теорема об остатках в классическом виде утверждает следующее: если модули попарно взаимно просты, т.е. выполняется условие , то система имеет решение, и это решение единственно с точностью до модуля .
Более конструктивная форма теоремы даёт явную формулу решения. Обозначим и далее положим , где {FORMULA_7} удовлетворяют условию . Тогда любое число x, вычисленное по формуле , является решением системы и любые два решения совпадают по модулю .
Если модули не являются попарно взаимно простыми, то существует обобщённый критерий совместимости: система разрешима тогда и только тогда, когда для всех i,j выполняется условие . В этом случае класс решений описывается модулем, равным наименьшему общному кратному модулов исходной системы.
Конструктивное доказательство и алгоритм
Доказательство для попарно взаимно простых модулей обычно даётся конструктивно. Для двух сравнений приводят уравнение . Так как модули взаимно просты, существуют s и t, такие что . Используя эти коэффициенты, можно построить решение по формуле .
В общем случае для k сравнений берут произведение модулей и для каждого i вводят {FORMULA_7}. Затем нужно найти обратный элемент y_i по модулю m_i, т.е. решение сравнения . Такие обратные можно найти с помощью расширенного алгоритма Евклида, который для пар (a,m) даёт целые s,t с свойством и позволяет извлечь обратный элемент, если .
Алгоритм для практического вычисления сводится к последовательному применению расширенного алгоритма Евклида, вычислению M и всех M_i, вычислению обратных и суммированию по формуле . После этого результат обычно приводят к каноническому представлению остатка в интервале от 0 до M-1.
Примеры
Пример 1. Решим систему .
Сначала вычислим произведение модулей: и затем соответствующие частные . Далее нужно найти обратные элементы, т.е. решить . В этом примере решения обратных равны . Подставляя в общую формулу получаем , откуда окончательный ответ даётся условием (остаток в каноническом виде).
Пример 2 (случай не взаимно простых модулей). Рассмотрим систему . Здесь . Проверяем условие совместимости: разность остатков делится на gcd, то есть , следовательно система совместима и общий модуль решений равен .
Если же взять систему , то условие совместимости не выполняется и решений нет. Такие ситуации часто встречаются и требуют проверки условий перед поиском решений.
Применения и замечания
Китайская теорема об остатках активно используется в задачах восстановления целого числа по его остаткам (например, в сборе «остаточных» измерений), в алгоритмах криптографии (например, при работе с большими модулями в RSA и его модификациях), а также в вычислительной математике при распараллеливании вычислений по модулю.
Практически важно помнить два аспекта: во-первых, удобство использования явной формулы при попарно взаимно простых модулях; во-вторых, необходимость проверки условий совместимости в общем случае. Для вычислений с большими числами часто используют представление по модулю произведения, что позволяет работать с несколькими меньшими словами процессора параллельно.
Визуально алгоритм можно представить диаграммой процессов: сначала сбор модулей и остатков, затем вычисление M и всех M_i, параллельное нахождение обратных по модулям, суммирование и приведение остатка. (Схема процесса показана на рисунке {IMAGE_0}.) Для пояснения шагов расширенного алгоритма Евклида может быть полезна отдельная иллюстрация {IMAGE_1}.
Задачи для самостоятельного решения
1) Решите систему (повторить пример 1 самому).
2) Проверьте совместимость и при необходимости найдите решение для системы и для системы .
3) Составьте алгоритм на псевдокоде, реализующий конструктивный метод с использованием расширенного алгоритма Евклида и протестируйте его на случайных наборах попарно взаимно простых модулей.