- •Введение
- •Элементы теории чисел
- •Модулярная арифметика
- •Алгоритм Евклида для нахождения наибольшего общего делителя
- •Вычисление обратных величин
- •Основные способы нахождения обратных величин
- •Расширенный алгоритм Евклида
- •Китайская теорема об остатках
- •Квадратичные вычеты
- •Вычисления в конечных полях
- •Свойства многочленов в двоичном поле gf(2)
- •Достоинства вычислений в поле Галуа gf(2 n)
- •Кодирование
- •Оптимальное кодирование
- •Обнаружение и исправление ошибок
- •Общие понятия
- •Линейные групповые коды
- •Код Хэмминга
- •Циклические коды
- •Построение и декодирование конкретных циклических кодов
- •Циклические коды, исправляющие две и большее количество ошибок, d0 5
- •Сжатие информации
- •Исключение повторения строк в последующих строках
- •Алгоритм lzw
- •Задания для самостоятельного выполнения
- •Расчетно-графическая работа №1
- •Расчетно-графическая работа №2
- •Список рекомендуемой литературы
- •Рекомендованная литература
-
Основные способы нахождения обратных величин
Существуют три основных способа нахождения обратных величин
а –1 ≡ х (mod n).
-
Проверить поочередно значения 1, 2, … , n – 1, пока не будет найден а – 1 1 (mod n), такой, что а • а –1 (mod n) 1.
-
Если известна функция Эйлера (n), то можно вычислить
а –1 (mod n) а (n) – 1 (mod n),
используя алгоритм быстрого возведения в степень.
-
Если функция Эйлера (n) не известна, можно использовать расширенный алгоритм Евклида.
Примеры.
-
Поочередная проверка значений 1, 2, … , n – 1, пока не будет найден х = а – 1 (mod n), такой, что а • х 1 (mod n).
Пусть n = 7, a = 5. Найти х = а – 1 (mod n).
а • х 1 (mod n) или 5 • х 1
n – 1 = 7 – 1 = 6.
Получаем х = 5 – 1 (mod 7) = 3.
Результаты проверки приведены в таблице 1.4.1.
Таблица 1.4.1 – Нахождение обратной величины первым способом
х |
5 • х |
5 • х (mod 7) |
1 2 3 4 5 6 |
5 10 15 20 25 30 |
5 3 1 6 4 2 |
-
Нахождение а –1 (mod n), если известна функция Эйлера (n).
Пусть n = 7, a = 5. Найти х = а – 1 (mod n) = 5 –1 (mod 7).
Модуль n = 7 – простое число. Поэтому функция Эйлера
(n) = (7) = n – 1 = 6.
Обратная величина от5 по mod 7:
а –1 (mod n) = а (n) – 1 (mod n) = 5 6 – 1 mod 7 = 5 5 mod 7 =
= (5 2 mod 7) (5 3 mod 7) mod 7 = (25 mod 7) (125 mod 7) mod 7 =
= (4 • 6) mod 7 = 24 mod 7 = 3.
Итак, х = 5 –1 (mod 7) = 3.
3. Нахождение обратной величины а –1 (mod n) с помощью расширенного алгоритма Евклида.
Алгоритм Евклида можно обобщить способом, который имеет большое практическое значение. При этом способе во время вычисления НОД (а, b) можно попутно вычислить такие целые числа u1 и u2, что
а • u1 + b • u2 = НОД (а, b).
Это обобщение (расширение) алгоритма Евклида удобно описать, используя векторные обозначения.
-
Расширенный алгоритм Евклида
При заданных неотрицательных целых числах а и b этот алгоритм определяет вектор (u1, u2, u3), такой, что
а • u1 + b • u2 = u3 = НОД (а, b).
В процессе вычисления используются вспомогательные векторы (v1, v2, v3), (t1, t2, t3). Действия с векторами производятся таким образом, что в течение всего процесса вычисления выполняются соотношения
а • t1 + b • t2 = t3,
а • u1 + b • u2 = u3,
а • v1 + b • v2 = v3.
Для вычисления обратной величины а –1 (mod n) используется частный режим работы расширенного алгоритма Евклида, при котором:
b = n, НОД (а, n) = 1, и этот алгоритм определяет вектор (u1, u2, u3), такой, что
u3 = 1, а • u1 + n • u2 = НОД (а, n) = 1,
(а • u1 + n • u2) mod n а • u1 (mod n) 1,
а –1 (mod n) u1 (mod n).
Шаги алгоритма:
-
Начальная установка.
Установить (u1, u2, u3) : = (0, 1, n),
(v1, v2, v3) : = (1, 0, a).
-
u3 = 1 ?. Если u3 = 1, то алгоритм останавливается.
-
Разделить, вычесть.
Установить q : = [u3 / v3].
Затем установить
(t1, t2, t3) : = (u1, u2, u3) – (v1, v2, v3) • q,
(u1, u2, u3) : = (v1, v2, v3),
(v1, v2, v3) : = (t1, t2, t3).
Возвратиться к шагу 2.
Пример. Даны модуль n = 23 и число а = 5.
Найти обратное число а –1 (mod 23), т.е. х = 5 –1 (mod 23).
Используя расширенный алгоритм Евклида, выполним вычисления, записывая результаты отдельных шагов в таблицу 1.5.1.
Таблица 1.5.1 – Шаги выполнения алгоритма Евклида
q |
u1 |
u2 |
u3 |
v1 |
v2 |
v3 |
- 4 1 1 - |
0 1 - 4 5 -9 |
1 0 1 - 1 2 |
n = 23 5 3 2 1 |
1 - 4 5 - 9 |
0 1 - 1 2 |
a = 5 3 2 1
|
При u3 = 1, u1 = - 9, u2 = 2.
(а • u1 + n • u2) mod n = (5 • (- 9) + 23 • 2) mod 23 = 5 • (- 9) mod 23 1,
а –1 (mod n) = 5 –1 (mod 23) = (- 9) (mod 23) = (- 9 + 23) (mod 23) = 14.
Таким образом, х = 5 –1 (mod 23) 14 (mod 23) = 14.
Для решения более сложных сравнений
а • х b (mod n), т.е. b 1, x = ?
используется следующий прием. Сначала решают сравнение
а • y 1 (mod n),
т.е. определяют y = a –1 (mod n),
а затем находят
x = a –1 • b (mod n) = y • b (mod n).
Пример. Найти х для сравнения 5 • х 9 (mod 23).
Сначала решаем сравнение 5 • y 1 (mod 23).
Получаем y = 5 –1 (mod 23) = 14. Затем находим
x = 5 –1 • 9 (mod 23) = 14 • 9 (mod 23) = 126 (mod 23) 11 (mod 23).
x = 11.