logo
Теория чисел (расчётка)

Китайская теорема об остатках

Любое неотрицательное целое число, не превосходящее произведения модулей, можно однозначно восстановить, если известны его вычеты по этим модулям. Этот результат был известен еще в древнем Китае и носит название китайской теоремы об остатках. Теорема была предложена китайским математиком первого века Сун Це. Китайская теорема об остатках является мощным криптографическим инструментом.

Она формулируется следующим образом.

Пусть 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).