Скачиваний:
7
Добавлен:
01.03.2022
Размер:
22.76 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищённых систем связи

ОТЧЁТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №3

 

Классический и Бинарный алгоритмы Евклида

Направление/специальность подготовки

                        10.03.01 Информационная безопасность                           

 (код и наименование направления/специальности)

Выполнил:

 

%username%                        

(Ф.И.О., № группы)                 (подпись)

 

                                                                Выполнил:

 %username%                         

(Ф.И.О., № группы)                 (подпись)

 

                                                                Выполнил:

 

%username%                      

(Ф.И.О., № группы)                 (подпись)

 

 

 

 

Проверил:

 

%username%

(уч. степень, уч. звание,И.Ф)                 (подпись)

Теория

Вариант 10

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 24 = 1* 2 * 2 * 2* 3

  2. 20 = 1* 2 * 2 * 5

Ответ: НОД (24; 20) = 4

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 1125851

  2. 1129913

(Шаг 1) 1129913 : 1125851 = 1 (остаток 4062), так как 1129913 = 1125851 ∙ 1 + 4062, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 1125851 на 4062 (Шаг 2) 1125851 : 4062 = 277 (остаток 677), так как 1125851 = 4062 ∙ 277 + 677, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 4062 на 677 4062 : 677 = 6 (остаток 0), так как 4062 = 677 ∙ 6 + 0, равен нулю, значит НОД равен предыдущему остатку от деления Ответ: НОД (1129913; 1125851) = 677

  1. Вычисление НОД binary алгоритмом Эвклида «Вручную»

    1. 24 = 1* 2 * 2 * 2* 3 == Четное

    2. 20 = 1* 2 * 2 * 5 == Четное

  • НОД (24,20) = 2 * (12,10) = 2 * 2 (6,5) =4(6-5.5)= ... =4 (1.1)

  1. Вычисление НОД binary алгоритмом Эвклида

#include "iostream"

using namespace std;

int gcd(int u, int v);

int main()

{

int u;

int v;

cout << "Numbers should lay in [0; MAXINT] interval." << endl;

cout << "Enter 1st number: " << endl;

cin >> u;

 

if (u < 0)

{

cout << "Incorrect value." << endl;

cout << "Press any key to exit." << endl;

system("PAUSE");

exit(1);

}

cout << "Enter 2nd number: " << endl;

cin >> v;

if (v < 0)

{

cout << "Incorrect value." << endl;

cout << "Press any key to exit." << endl;

system("PAUSE");

exit(2);

}

cout << "Greatest common dividor is: " << gcd(u, v) << endl;

system("PAUSE");

return 0;

}

int gcd(int u, int v)

{

int shift;

/* НОД(0, n) = n; НОД(m, 0) = m. */

if (u == 0 || v == 0)

return u | v;

/* Если m, n чётные, тогда НОД(m, n) = 2 * НОД(m / 2, n / 2).

Пусть shift := lg K, где K наибольшая степень 2 такая, что оба числа

целиком делятся на 2 в степени K. */

for (shift = 0; ((u | v) & 1) == 0; ++shift)

{

u >>= 1;

v >>= 1;

}

// Если m чётное, тогда НОД(m, n) = НОД(m / 2, n).

while ((u & 1) == 0)

u >>= 1;

/* Далее считается, что u нечетное. */

do

{

while ((v & 1) == 0) /* Если n чётное, тогда НОД(m, n) = НОД(m, n / 2). */

v >>= 1;

/* Далее считается, что u и v нечетные. Следовательно, u - v четно.

Пусть u = min(u, v), v = (u - v) / 2. */

if (u < v) /* Если m, n нечётные и m < n, тогда НОД(m, n) = НОД(n - m, m). */

{

v -= u;

}

else /* Если m, n нечётные и m > n, тогда НОД(m, n) = НОД(m - n, m). */

{

int diff = u - v;

u = v;

v = diff;

}

 

v >>= 1;

}

while (v != 0);

return u << shift;

}

Ответ: НОД = 677

Вариант 13

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 28 = 1 * 2 *2 * 7

  2. 22 = 1 * 2 * 11

Ответ: НОД (28; 22) = 2

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 1678583

  2. 1689179

(Шаг 1) 1689179 : 1678583 = 1 (остаток 10596), так как 1689179 = 1678583 ∙ 1 + 10596, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 1678583 на 10596 (Шаг 2) 1678583 : 10596 = 158 (остаток 4415), так как 1678583 = 10596 ∙ 158 + 4415, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 10596 на 4415 (Шаг 3) 10596 : 4415 = 2 (остаток 1766), так как 10596 = 4415 ∙ 2 + 1766, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 4415 на 1766 (Шаг 4) 4415 : 1766 = 2 (остаток 883), так как 4415 = 1766 ∙ 2 + 883, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 1766 на 883 1766 : 883 = 2 (остаток 0), так как 1766 = 883 ∙ 2 + 0, равен нулю, значит НОД равен предыдущему остатку от деления Ответ: НОД (1678583; 1689179) = 883

  1. Вычисление НОД binary алгоритмом Эвклида «Вручную»

    1. 28 = 1 * 2 *2 * 7 == Четное

    2. 22 = 1 * 2 * 11 == Четное

  • НОД (28,22) = 2 * (14,11) = 2 (14-11,11) =…= 2 (1.1)

  1. Вычисление НОД binary алгоритмом Эвклида

#См. код выше

Ответ: НОД = 833

Вариант 4

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 20 = 1* 2 *2* 2* 3

  2. 12 = 1*2 *2 * 5

Ответ: НОД (12; 20) = 4

  1. Вычисление НОД алгоритмом Эвклида «Вручную»

  1. 1509212

  2. 759518

(Шаг 1) 1509212 : 759518 = 2 (остаток 749694), так как 1509212 = 759518 ∙ 2 + 749694, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 759518 на 749694 (Шаг 2) 759518 : 749694 = 1 (остаток 9824), так как 759518 = 749694 ∙ 1 + 9824, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 749694 на 9824 (Шаг 3) 749694 : 9824 = 76 (остаток 3070), так как 749694 = 9824 ∙ 76 + 3070, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 9824 на 3070 (Шаг 4) 9824 : 3070 = 3 (остаток 614), так как 9824 = 3070 ∙ 3 + 614, остаток от деления не равен нулю, поэтому продолжаем деление, разделим 3070 на 614 3070 : 614 = 5 (остаток 0), так как 3070 = 614 ∙ 5 + 0, равен нулю, значит НОД равен предыдущему остатку от деления Ответ: НОД (1509212; 759518) = 614

  1. Вычисление НОД binary алгоритмом Эвклида «Вручную»

    1. 24 = 1* 2 *2* 2* 3 == Четное

    2. 20 = 1*2 *2 * 5 == Четное

  • НОД (24,20) = 2 * (12,10) = 2 * 2 (6,5) == 4(6-5.5) =... = 4 (1.1)

  1. Вычисление НОД binary алгоритмом Эвклида

#См. код выше

Ответ: НОД = 614

Соседние файлы в предмете Математические основы защиты информации