Лаб_02
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
ФАКУЛЬТЕТ ИНФОКОММУНИКАЦИОННЫХ СЕТЕЙ И СИСТЕМ (ИКСС)
КАФЕДРА ЗАЩИЩЕННЫХ СИСТЕМ СВЯЗИ (ЗСС)
_______________________________________________________________________________
Отчет
по практической работе №2
«Алгоритмы Эвклида»
Выполнил студент группы ИКБ-14:
Травкина Е.А.
Проверил:
Кушнир Дмитрий Викторович
Санкт-Петербург
2023
Алгоритмы Эвклида.
Нахождения наибольшего общего делителя НОД ().
В криптографии важную роль играет теория чисел. Некоторые задачи из теории чисел, используемые при построении криптографических преобразований:
Нахождение наибольшего общего делителя чисел a и b: НОД (a, b).
Один из путей решения – разложить каждое из чисел на множители и найти в двух разложениях максимальный совпадающий, однако такой подход является неэффективным (имеет экспоненциальную сложность).
Алгоритм Эвклида – нахождение НОД.
Алгоритм в общем виде: Найти: НОД(a,b) a =b *q1 + r1 0≤ri<b //q1-целое,r1-остаток от деления a на b * b =r1 *q2 + r2 0≤r2<r1 ………………………………
rn-3=rn-2 *qn-1 +rn-1 rn-2=rn-1 *qn +0 rn=0 Ответ: НОД(a,b)=rn-1 //ответ – последний ненулевой остаток.
* Примечание: в выражении a=b*q1 + r1 имеется ввиду, что производится деление числа а на b и вычисляется остаток r1 и количество целых q1.
Пример НОД(1234,54) 1234 = 54 *22 +46 54 = 46 * 1 + 8 46 = 8 * 5 + 6 8 = 6 * 1 + 2 6 = 2 * 3 + 0 Последний ненулевой остаток 2, т.е. НОД (1234,54)=2
Формализованное описание алгоритма Эвклида:
Бинарный алгоритм Евклида
Бинарный алгоритм Евклида вычисления НОД оказывается более быстрым при реализации этого алгоритма на компьютере, поскольку использует двоичное представление чисел а и b.
Бинарный алгоритм Евклида основан на следующих свойствах наибольшего общего делителя (считаем, что 0 < b ≤ а):
если оба числа а и b четные, то НОД(a,b) = 2 · НОД(a/2 , b/2)
если число а нечетное, число b четное, то НОД (a, b) = НОД(а, b/2);
если оба числа а и b нечетные, а > b, то НОД(а, b) = НОД(а – b, b);
если а = b, то НОД (а, b) = а.
Формализованное описание алгоритма Бинарного алгоритма Евклида.
Вход: Целые числа a, b; 0 < b ≤ а.
Выход. d = HOД(a,b).
Положить g ← 1.
Пока оба числа а и b четные, выполнять а← a/2 , b ← b/2, g ← 2g до получения хотя бы одного нечетного значения а или b.
Положить u ← a, v ← b.
Пока u ≠ 0, выполнять следующие действия.
4.1. Пока u четное, полагать u ← u/2.
4.2. Пока v четное, полагать v ← v/2.
4.3. При u ≥ v положить: u ← u–v, в противном случае: v ← v–u.
Положить d ← gv.
Результат: d. Р
Пример («ручное» вычисление): НОД (88,52)
НОД (88,52) = 2*НОД (44,26) = 4*НОД (22,13) = 4*НОД (11,13) =
= 4*НОД (13-11,11) = 4*НОД (2,11) = 4*НОД (11-2,2) = 4*НОД (9,2) = 4*НОД (9-2,2) = 4*НОД (7,2) = 4*НОД (5,2) = 4*НОД (5-2,2) = 4*НОД(3,2) = 4*НОД (3-2,2) = 4*НОД(1,2) = 4*НОД(2-1,1)=4*НОД(1,1)=4
Задания для 23 варианта
Выполним «вручную» вычисление НОД (40,34) алгоритмом Эвклида.
Ручное вычисление НОД (40,34) 40 = 34 * 1 + 6 34 = 6 * 5 + 4 6 = 4 * 1 + 2 4 = 2 * 2 + 0 Последний ненулевой остаток 2, т.е. НОД (40,34) = 2
Выполним вычисление НОД (4261494,2264828) алгоритмом Эвклида в среде Excel (РИС. 1)
РИC. 1 Отображение формул ячеек
Последний ненулевой остаток выделен зеленым цветом и равен 2, т.е. НОД (4261494,2264828) = 2
Выполним «вручную» вычисление НОД (40,34) бинарным алгоритмом Эвклида.
«Ручное» вычисление НОД (40,34):
НОД (40,34) = 2*НОД (20,17) = 2*НОД (10,17) = 2*НОД (5,17) =
= 2*НОД (17-5,5) = 2*НОД (12,5) = 2*НОД (6,5) = 2*НОД (3,5) =
= 2*НОД (5-3,3) = 2*НОД (2,3) = 2*НОД (1,3) = 2*НОД (3-1,1) = 2*НОД (2,1) = 2*НОД (1,1) = 2*1 = 2
Выполним вычисление НОД (4261494,2264828) бинарным алгоритмом Эвклида в программной среде Python. Программный код в папке main для вычисления алгоритма (РИС. 2). Вывод программы с проверочными значениями и со значением из нашего варианта (РИС. 3)
РИС. 2 Программный код на языке python
РИС. 3 Проверка работоспособности программы
ВЫВОД:
В ходе практической работы №2 был изучен алгоритм Евклида и бинарный алгоритм Евклида. Мы научились вручную делать вычисления по этим алгоритмам, а также вычислять значения алгоритмов для больших значений на компьютере в Excel и на языке Python.