Поиск по сайту.


Другие алгоритмы.

Математика: Теория чисел.

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

Пусть B - натуральное число, m1, m2, ..., mt - взаимно простые натуральные числа, произведение которых больше либо равно B.

Теорема. любое число x: 0 <= x <= B может быть однозначно представлено в виде последовательности v(x) = (v1, v2, ..., vt), где vi = x(mod mi).

Эта последовательность называется модульным представлением x. Набор модульныых представлений для всех x: 0 <= x <= B называется системой вычетов.

Операции.

Сумма - последовательность wi = vi + ui mod mi
Произведение - аналогично zi = vi * ui mod mi.

Знакомым с теорией колец: теорема <=> ZB = Zm1 + ... + Zmt, сумма прямая.Из этого все операции определяются очевидным образом.

Восстановление: алгоритм Гарнера.

Даю псевдокод

1. For i from 2 to t {
    1.1 Ci := 1; 
    1.2 For j from 1 to (i-1) {
           u := mj-1 mod mi; 
	       Ci := u*Ci mod mi; 
        }
    }
2. u := v1; x := u; 
3. For i from 2 to t {
       u := (vi-x)Ci mod mi;
	   x := x + u* [ Произведение mj от j=1 до i-1 ]; 
    }
4. return (x);  

Пример: пусть
m1=5, m2=7, m3=11, m4=13, M=Пmi=5*7*11*13=5005,
v(x) = (2, 1, 3, 8).

Константы Ci: C2=3, C3=6, C4=5.

Значения (i, u, x), вычисленные на шаге 3: (1, 2, 2); (2, 4, 22); (3, 7, 267) и (4, 5, 2192).

Таким образом модульное представление v(x) отвечает x = 2192.

Прим. Нахождение m-1 - обратного элемента по модулю можно осуществить по алгоритму Евклида.


Вверх по странице, к оглавлению и навигации.