Китайская теорема об остатках
Любое неотрицательное целое число, не превосходящее произведения модулей, можно однозначно восстановить, если известны его вычеты по этим модулям. Этот результат был известен еще в древнем Китае и носит название китайской теоремы об остатках. Теорема была предложена китайским математиком первого века Сун Це. Китайская теорема об остатках является мощным криптографическим инструментом.
Она формулируется следующим образом.
Пусть m1, m2, … , m t – модули (целые числа, большие 1), которые являются попарно взаимно простыми, т.е. НОД (mi, mj,) = 1 при i j.
Пусть а1, а2, … , а t – тоже целые числа, такие, что 0 ≤ а i ≤ m i.
Пусть М = m1 • m2 • … • m t – произведение всех m i . Обозначим М i = M / m i.
И пусть N i будет обратным к М i (mod m i), i = 1, 2, … , t, т.е.
М i • N i 1 (mod m i).
Так как НОД (М i , m i) = 1, то обратный элемент N i существует и легко находится по алгоритму Евклида из соотношения
М i • N i + m i • n i = 1, i = 1, 2, … , t.
Сравнения х а i (mod m i), i = 1, 2, … , t, имеют в интервале
[0, M – 1] единственное общее решение
х = a i • N i • М i (mod M).
Рассмотрим частный случай. Пусть М = m1 • m2 , где m1 и m2 – взаимно простые числа. Тогда для произвольных целых а1 < m 1 и а 2 < m 2 существует единственное число х, х < М, такое, что
х а 1 (mod m 1) и х а 2 (mod m 2).
Чтобы найти значение решения х, сначала используют алгоритм Евклида для вычисления значений N 1 и N 2 , таких, что
М 1 • N 1 1 (mod m 1) и М 2 • N 2 1 (mod m 2).
Здесь M m 1 • m 2 M
M 1 = = = m 2 ; M 2 = = m 1.
m 1 m 1 m 2
Затем вычисляют значение
х = (a 1 • N 1 • М 1 + a 2 • N 2 • М 2 ) (mod M).
Алгоритм 1.6.1 – Нахождение решения системы сравнений, использующий Китайскую теорему об остатках
{возврат х [0, M – 1], такого что х mod m i = a i (1 ≤ i ≤ t)}
begin
for i : = 1 to t do
N i : = inv (M i mod m i, m j);
x : = 0;
for i : = 1 to t do
x : = [x + M i • N i • a i ] mod n;
crt : = x {crt - результат}
end
Пример. Решить систему из двух сравнений
х 1 (mod 5),
х 10 (mod 11)
и найти общее решение х по модулю 55.
Здесь: m 1 = 5; m 2 = 11; M = m 1 • m 2 = 5 • 11 = 55;
а 1 = 1; а 2 = 10; M 1 = М / m 1 = m 2 = 11; M 2 = М / m 2 = m 2 = 5.
Найдем значения N 1 и N 2, обратные к M 1 и M 2 сответственно по mod m 1 и mod m 2 :
М 1 • N 1 1 (mod m 1), 11 • N 1 1 (mod 5) N 1 = 1,
М 2 • N 2 1 (mod m 2), 5 • N 2 1 (mod 11) N 2 = 9.
Вычислим общее значение
х = (a 1 • N 1 • М 1 + a 2 • N 2 • М 2 ) (mod M) =
= (1 • 11 • 1 + 10 • 5 • 9 ) (mod 55) = (11 + 450) (mod 55) =
= 461 (mod 55) = 21 (mod 55).
Итак, х = 21 (mod 55).
- Введение
- Элементы теории чисел
- Модулярная арифметика
- Алгоритм Евклида для нахождения наибольшего общего делителя
- Вычисление обратных величин
- Основные способы нахождения обратных величин
- Расширенный алгоритм Евклида
- Китайская теорема об остатках
- Квадратичные вычеты
- Вычисления в конечных полях
- Свойства многочленов в двоичном поле gf(2)
- Достоинства вычислений в поле Галуа gf(2 n)
- Кодирование
- Оптимальное кодирование
- Обнаружение и исправление ошибок
- Общие понятия
- Линейные групповые коды
- Код Хэмминга
- Циклические коды
- Построение и декодирование конкретных циклических кодов
- Циклические коды, исправляющие две и большее количество ошибок, d0 5
- Сжатие информации
- Исключение повторения строк в последующих строках
- Алгоритм lzw
- Задания для самостоятельного выполнения
- Расчетно-графическая работа №1
- Расчетно-графическая работа №2
- Список рекомендуемой литературы
- Рекомендованная литература