МОЗИ_Лаб_04_(Расширенный_алгоритм_Эвклида)
.docЛабораторная/практика №4.
Расширенный алгоритм Эвклида
Кроме вычисления d=НОД(a,b), алгоритм Эвклида позволяет дополнительно определить два целых числа α и β, таких что:
α * a + β * b = d; (соотношение Безу)
α и β – коэффициенты Безу.
Замечание, «почти всегда» если α положительна, то β отрицательно и наоборот.
Эти два числа можно вычислять одновременно с выполнением шагов в алгоритме Эвклида по следующей схеме:
Ручной метод «прямой»:
Рассмотрим шаги получения НОД (24;15):
24 = 15 * 1 + 9
15 = 9 * 1 + 6
9 = 6 * 1 + 3
6 = 3 * 2 + 0
Добавим для каждого шага представление «текущего» остатка как линейной комбинации исходных чисел a и b:
9=24+(-1)*15
6=15-9=15-(24-15)=2*15+(-1)*24
3=9-6=24+(-1)*15-[2*15+(-1)*24]=2*24+(-3)*15; т.е. α=2; β=-3.
Алгоритм в общем виде: Найти: НОД(a,b) a =b *q1 + r1 и r1 = α * x1 + β * y1 b =r1 *q2 + r2 и r2 = α * x2 + β * y2 ………………………………
rn-3=rn-2 *qn-1 +rn-1 и rn-1= α * xn-1 + β * yn-1 //на этом шаге получаем α,β rn-2=rn-1 *qn rn=0 Ответ: НОД(a,b)=rn-1 //ответ – последний ненулевой остаток.
Представим это в виде таблицы:
остатки |
частные |
x |
y |
a |
* |
x(-1) |
y(-1) |
b |
* |
x0 |
y0 |
r1 |
q1 |
x1 |
y1 |
r2 |
q2 |
X2 |
y2 |
|
|
|
|
rn-2 |
qn-2 |
xn-2 |
yn-2 |
rn-1 |
qn-1 |
xn-1 |
yn-1 |
Заметим, что в начале этой таблицы появились две дополнительные строчки.
Они нам помогут вычислить x1 и y1 :
x(-1)=1, y(-1)=0, x0=0, y0=1;
xj=xj-2-qj*xj-1; yj=yj-2-qj*yj-1; //Пояснение соотношений – см. лекции.
Пример расширенного алгоритма Эвклида для чисел 1234 и 54
остатки |
частные |
x |
y |
1234 |
* |
1 |
0 |
54 |
* |
0 |
1 |
46 |
22 |
1-22*0=1 |
0-22*1=-22 |
8 |
1 |
0-1*1=-1 |
1-1*(-22)=23 |
6 |
5 |
1-5*(-1)=6 |
-22-5*23=-137 |
2 |
1 |
-1-1*6=-7 |
23-1*(-137)=160 |
0 |
3 |
* |
* |
α = -7; β=160. Действительно: (-7)*1234+160*54=2.
Нахождение обратного элемента по модулю.
Определение. Обратным к числу a по модулю n называется такое число b (обычно обратное к a обозначают как a-1), что: a*b = 1 mod n ( a * a-1 = 1 mod n )
Рассмотрим выражение: a * х + n * y = 1 (это и есть соотношение Безу)
возьмём от обеих частей уравнения остаток по модулю n, то получим:
a * х = 1 mod n, х – и есть обратный элемент к a. Пример: m=11, a=3; 4*3+(-1)*11=1; 4*3=1 mod 11, т.е. a-1 = 4.
Если получаете отрицательный ответ – переведите в положительный: через n-х.
Нахождение противоположного элемента по модулю.
Определение. Противоположным к числу a по модулю n называется такое число b, что: a+b = 0 mod n. b записывают в виде положительного числа.
Факультативное задание. Расширенный бинарный алгоритм Евклида* (факультативно, задание может быть пропущено, если же выполнено, то отметьте это в имени файла отчета – будет засчитано как «+» к зачёту по предмету).
Вход: Целые числа а, b; 0 < b ≤ а.
Выход: d = НОД(a, b); и такие целые числа х, у, что ах + by = d.
Алгоритм:
Положить g ← 1.
Пока оба числа а и b четные, выполнять а ← a/2, b ← b/2 , g ← 2g до получения хотя бы одного нечетного значения а или b.
Положить u ← a, v ← b, А ← 1, В ← 0, С ← 0, D ← 1.
Пока u ≠ 0, выполнять следующие действия:
Пока u четное, положить u ← u/2. Если оба числа А и B четные, то положить A ← A/2, B ← B/2. В противном случае положить A ← (A+b)/2, B ← (B–a)/2
Пока v четное, положить v ← v/2.
Если оба числа С и D четные, то положить С ← C/2, D ← D/2. В противном случае положить C ← (C + b)/2, D ← (D – a)/2
При u ≥ v положить u ← u – v, А ← А – С, В ← В – D. В противном случае положить v ← v – u, C ← C–A, D ← D – B.
Если u=0, то
Положить d ← gv, x ← С, у ← D.
Результат: d, х, у.
Другой вариант описания расширенного бинарного алгоритма Евклида:
Задание.
Необходимо выбрать свой вариант (варианты) (вариант определяется номером студента в списке группы, если в бригаде несколько человек, то необходимо выполнить соответствующее число соответствующих вариантов).
Выполнить «вручную» расширенный алгоритмом Эвклида (возможно использование результатов выполнения предыдущей работы).
20 = 12 * 1 + 8
12 = 8 * 1 + 4
8 = 4 * 2 + 0
НОД = 4
8 = 20 + (-1) * 12
4 = 12 – 8 = 12 – (20 - 12) = 2 * 12 + (-1) * 20
A = 2
B = -1
88 = 26 * 3 + 10
26 = 10 * 2 + 6
10 = 6 * 1 + 4
6 = 4 * 1 + 2
4 = 2 * 2 + 0
НОД = 2
10 = 88 + (-1) * 26 * 3
6 = 26 – 10 * 2 = 26 – ((88 – 26 * 3) * 2) = 6 * 26 + (-4) * 88
4 = 10 – 6 = 10 – (88 – 26 * 3
Выполнить вычисление расширенного алгоритма Эвклида в среде Excel или в любой другой программной среде, которая позволяет выводить промежуточные шаги выполнения алгоритма.
Найти обратный элемент по модулю,.
Номер |
Параметры для выполнения расширенного алгоритма Эвклида (для «ручного» выполнения) |
Параметры для выполнения расширенного алгоритма Эвклида (для «программного» выполнения) |
||
|
a |
b |
a |
b |
1 |
22 |
28 |
558412 |
282494 |
2 |
44 |
20 |
830468 |
417526 |
3 |
26 |
44 |
1111492 |
564422 |
4 |
20 |
12 |
1509212 |
759518 |
5 |
34 |
20 |
1903996 |
956402 |
6 |
18 |
52 |
2380844 |
3643674 |
7 |
22 |
56 |
2830444 |
4298262 |
8 |
44 |
40 |
3429796 |
5212254 |
9 |
26 |
88 |
3941396 |
5949114 |
10 |
20 |
24 |
1125851 |
1129913 |
11 |
34 |
40 |
1307491 |
1316503 |
12 |
18 |
52 |
1500329 |
1520081 |
13 |
22 |
28 |
1678583 |
1689179 |
14 |
44 |
20 |
1927231 |
1933033 |
15 |
26 |
44 |
1081012 |
545222 |
16 |
20 |
12 |
1542844 |
775042 |
17 |
34 |
20 |
2123276 |
1070242 |
18 |
18 |
52 |
2687396 |
1353074 |
19 |
22 |
56 |
851189 |
854779 |
20 |
44 |
40 |
1025977 |
1030187 |
21 |
26 |
88 |
3239732 |
4877454 |
22 |
20 |
24 |
3198268 |
4859598 |
23 |
34 |
40 |
2264828 |
4261494 |
24 |
18 |
52 |
2861708 |
3438222 |
25 |
22 |
28 |
2992324 |
4900326 |
Номер |
Параметры для нахожденя обратного элемента к “a” по модулю “n”
|
|
|
a |
n |
1 |
11 |
19 |
2 |
5 |
19 |
3 |
4 |
23 |
4 |
3 |
23 |
5 |
11 |
23 |
6 |
2 |
23 |
7 |
3 |
29 |
8 |
4 |
29 |
9 |
5 |
29 |
10 |
6 |
29 |
11 |
7 |
31 |
12 |
8 |
31 |
13 |
9 |
31 |
14 |
10 |
31 |
15 |
11 |
31 |
16 |
12 |
19 |
17 |
13 |
19 |
18 |
14 |
19 |
19 |
15 |
17 |
20 |
16 |
17 |
21 |
2 |
17 |
22 |
3 |
17 |
23 |
4 |
17 |
24 |
5 |
17 |
25 |
6 |
19 |
Отчет.
Содержание отчёта:
Стандартный титульный лист.
Теория по исследуемому вопросу (достаточно использовать материалы задания самой лабораторной работы).
Формулировка задание на вычисления.
Шаги выполнения вычисления.
Проверку правильности найденных решений, если применимо (для расширенного алгоритма Эвклида проверить правильность нахождения коэффициентов Безу).
При выполнении заданий с помощью программирования в какой-либо среде – приводить программный код или указывать используемые формулы в соответствующей среде (например, формулы в ячейках Excel) и приводить вывод всех промежуточных шагов алгоритма. По программному коду в средах отличных от Excel возможны дополнительные вопросы с предложением внести изменения в порядок вычисления отдельных переменных или способ вывода промежуточных результатов.
Файл с отчётом должен иметь название по следующему шаблону: Лаб_(номер лабы(две цифры))_(номер группы)_ФамилияИО1_ФамилияИО2_ФамилияИО3. Пример: Лаб_01_ИКБ-82_Иванов_ДИ_Петров_ЕН.