5.1.3 Основные способы нахождения обратных величин
Существуют три основных способа нахождения обратных величин
а –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.
Результаты проверки приведены в таблице 5.2.
Таблица 5.2 – Нахождение обратной величины первым способом
х | 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.
Таблица 5.3 – Шаги выполнения алгоритма Евклида
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. }
- Дискретная математика
- 6.050102 “Компьютерная инженерия” содержание
- 1 Теория множеств 7
- 2 Математическая логика 15
- 3 Формальные теории 35
- 4 Теория графов 47
- 5 Элементы теории чисел 80
- 6 Теория алгоритмов 121
- Введение
- 1 Теория множеств
- 1.1 Множества и подмножества
- 1.1.1 Элементы множества
- 1.2 Аксиомы теории множеств
- 1.3 Способы задания множеств
- 1.4 Операции над множествами
- 1.5 Элементы алгебры множеств
- 1.5.1 Определение алгебры множеств
- 1.5.2 Основные законы алгебры множеств
- 1.5.3 Принцип двойственности
- 2 Математическая логика
- 2.1 Функции алгебры логики (булевые функции)
- 2.1.1 Способы задания булевых функций
- 2.1.2 Логические функции одной переменной
- 2.1.3 Логические функции двух переменных
- 2.2.6 Функционально полные системы булевых функций
- 2.3 Алгебра буля
- 2.3.1 Определение алгебры. Теорема Стоуна
- 2.3.2 Законы алгебры логики
- 2.3.3 Разложения функций по переменным
- 2.3.4 Приведение логических функций
- 2.3.5 Импликанты и имплициенты булевых функций
- 2.3.6 Методы минимизации логических функций
- 2.4 Алгебра жегалкина
- 2.4.1 Преобразование функций в алгебре Жегалкина
- 2.4.2 Переход от булевой алгебры к алгебре Жегалкина
- 3 Формальные теории
- 3.1 Основные принципы построения формальных теорий исчисления
- 3.2 Определение исчисления высказываний
- 3.2.1 Метатеоремы исчисления высказываний
- 3.2.2 Схемы исчисления высказываний
- 3.3 Исчисление предикатов
- 3.3.1 Определение формальной теории pl
- 3.3.2 Принцип резолюции в исчислении предикатов
- 3.3.3 Схемы доказательств в исчислении предикатов
- 4 Теория графов
- 4.1 История теории графов
- 4.2 Основные определения
- 4.3 Способы представления графов
- 4.3.1 Матрицей смежности
- 4.3.2 Матрицей инцидентности
- 4.4 Пути в графах
- 4.4.1 Задача о кратчайшем пути
- 4.4.2 Алгоритм Дейкстры нахождения кратчайшего пути в графе
- 4.5 Транспортные сети
- 4.5.1 Потоки в транспортных сетях
- 4.5.2 Задача нахождения наибольшего потока в транспортной сети
- 4.5.3 Алгоритм Форда и Фалкерсона нахождения максимального потока транспортной сети
- 4.5.4 Транспортная задача
- 4.6 Обходы в графах
- 4.6.1 Эйлеровы графы
- 4.6.2 Алгоритм Флёри нахождения эйлерова цикла
- 4. Если получился цикл, но не ейлеров, то отбрасываем данную последнюю вершину и повторяем пункт 2.
- 4.6.3 Гамильтоновы циклы
- 4.6.4 Метод ветвей и границ.
- 4.6.5 Метод ветвей и границ в задаче о коммивояжёре
- 4.7 Деревья
- 4.7.1 Построение экономического дерева
- 4.7.2 Алгоритм Краскала
- 5 Элементы теории чисел
- 5.1 Модулярная арифметика
- 5.1.1 Алгоритм Евклида для нахождения наибольшего общего делителя
- 5.1.2 Вычисление обратных величин
- 5.1.3 Основные способы нахождения обратных величин
- 5.1.4 Китайская теорема об остатках
- 5.2 Кодирование
- 5.2.1 Оптимальное кодирование
- 5.3 Обнаружение и исправление ошибок
- 5.3.1 Общие понятия
- 5.3.2 Линейные групповые коды
- 5.3.2 Код Хэмминга
- 5.3.3 Циклические коды
- 5.3.4 Построение и декодирование конкретных циклических кодов
- 5.4 Сжатие информации
- 5.4.1 Исключение повторения строк в последующих строках
- 5.4.2 Алгоритм lzw
- 6 Теория алгоритмов
- 6.1. Основные понятия
- 6.1.1 Основные требования к алгоритмам
- 6.1.2 Блок–схемы алгоритмов
- 6.1.3 Представление данных
- 6.1.4 Виды алгоритмов
- 6.1.5 Правильность программ
- 6.1.6 Эффективность алгоритмов
- 6.1.7 Сходимость, сложность, надежность
- 6.2 Универсальные алгоритмы
- 6.2.1 Основные понятия
- 6.2.2 Машины Тьюринга
- 6.2.3 Рекурсивные функции
- 6.2.5 Тезис Черча-Тьюринга
- 6.2.6 Проблема самоприменимости
- 6.3 Языки и грамматики
- 6.3.1 Общие понятия
- 6.3.2 Формальные грамматики
- 6.3.3 Иерархия языков
- 6.4 Параллельные вычисления
- Рекомендованная литература