- •Введение
- •Элементы теории чисел
- •Модулярная арифметика
- •Алгоритм Евклида для нахождения наибольшего общего делителя
- •Вычисление обратных величин
- •Основные способы нахождения обратных величин
- •Расширенный алгоритм Евклида
- •Китайская теорема об остатках
- •Квадратичные вычеты
- •Вычисления в конечных полях
- •Свойства многочленов в двоичном поле gf(2)
- •Достоинства вычислений в поле Галуа gf(2 n)
- •Кодирование
- •Оптимальное кодирование
- •Обнаружение и исправление ошибок
- •Общие понятия
- •Линейные групповые коды
- •Код Хэмминга
- •Циклические коды
- •Построение и декодирование конкретных циклических кодов
- •Циклические коды, исправляющие две и большее количество ошибок, d0 5
- •Сжатие информации
- •Исключение повторения строк в последующих строках
- •Алгоритм lzw
- •Задания для самостоятельного выполнения
- •Расчетно-графическая работа №1
- •Расчетно-графическая работа №2
- •Список рекомендуемой литературы
- •Рекомендованная литература
-
Алгоритм Евклида для нахождения наибольшего общего делителя
Целое число а делит без остатка другое целое число b, если и только если
b = k • a
для некоторого целого числа k. В этом случае а называют делителем числа b или множителем в разложении числа b на множители.
Пусть а – целое число, причем а > 1. Тогда а является простым числом, если его единственным положительным делителем будут 1 и само а. В противном случае а называется составным.
Любое целое n > 1 может быть представлено единственным образом с точностью до порядка сомножителей как произведение простых.
Существенный с точки зрения криптографии факт состоит в том, что не известно никакого эффективного алгоритма разложения чисел на множители. Не было получено и никакой нетривиальной нижней оценки временной сложности разложения. Никаких эффективных методов не известно даже в таком простом случае, когда необходимовосстановить два простых числа p и q из их произведения:
n = p • q.
Наибольший общий делитель чисел а и b, обозначаемый как НОД (а, b) или просто (а, b), это наибольшее целое, делящее одновременно числа а и b.
В эквивалентной форме (а, b) – это то единственное натуральное число, которое делит а и b и делится на любое целое, делящее и а и b.
Если НОД (а, b) = 1, то целые а и b – взаимно простые.
Наибольший общий делитель может быть вычислен с помощью алгоритма Евклида. Евклид описал этот алгоритм в своей книге “Начала”, написанной около 300 лет до н.э. Он не изобрел его. Историки полагают, что этот алгоритм, возможно, старше еще на 200 лет. Это древнейший нетривиальный алгоритм, который просуществовал до настоящего времени и все еще хорош и сегодня.
Опишем алгоритм Евклида для нахождения НОД (а, b).
Введем обозначения: q i – частное , r i – остаток.
Тогда алгоритм можно представить в виде следующей цепочки равенств:
а = b • q 1 + r 1, 0 < r 1 < b,
b = r 1 • q 2 + r 2, 0 < r 2 < r 1,
r1 = r 2 • q 3 + r 3, 0 < r 3 < r 2,
. .
. .
. .
r k - 2 = r k - 1 • q k + r k, 0 < r k < r k - 1,
r k - 1 = r k • q k + 1.
Остановка гарантируется, поскольку остатки r i от делений образуют строго убывающую последовательность натуральных чисел. Из этой цепочки немедленно получаем, что r k есть общий делитель чисел а и b и, более того, что любой общий делитель чисел а и b делит и r k. Таким образом, r k = НОД (а, b) или r k = (а, b).
Алгоритм 1.2.1 – Алгоритм Евклида для вычисления наибольшего общего делителя
begin
g 0 : = b;
g 1 : = a;
i : = 1
while g i ! = 0 do
begin
g i + 1 : = g i – 1 mod g i ;
i : = i + 1
end
gcd : = g i – 1 {gcd - результат}
end