Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы модулярной арифметики. Практикум
.pdf
Практическая работа 2
pp2p3p4p
82 3 17 37 43 61 0 0 32 34 1 2 11 32 27 46
83 3 19 31 47 61 1 10 22 39 20 2 6 8 35 16
84 2 11 31 41 67 0 4 9 30 45 1 2 26 29 45
85 7 17 31 47 71 4 10 12 14 3 4 11 4 43 66
86 3 19 29 53 59 0 10 11 52 23 1 2 14 50 43
87 3 13 23 47 67 0 5 21 30 59 1 11 3 37 1
88 5 17 37 47 71 0 3 1 16 52 4 1 1 8 16
89 2 17 29 43 61 1 4 5 20 15 1 1 26 37 2
90 2 19 29 41 71 0 16 13 33 42 1 8 0 17 44
91 5 17 29 53 61 2 6 19 24 18 1 8 24 50 11
92 7 13 29 43 71 4 4 19 16 17 3 5 20 20 13
93 5 11 37 53 59 1 2 7 9 19 3 0 1 31 52
94 5 13 31 53 59 0 1 13 23 17 3 12 2 0 55
95 3 19 23 41 59 2 15 6 12 57 0 18 9 29 28
96 2 19 37 43 61 1 17 31 31 60 0 17 16 21 28
97 7 13 23 47 61 2 0 17 4 54 1 4 8 15 43
98 2 11 23 53 71 1 4 5 1 44 0 2 9 10 40
99 5 19 23 43 71 2 4 6 25 48 2 6 14 30 28
100 2 19 31 41 71 1 1 28 1 63 0 15 25 2 46
5
aa2a3a4a
bb2b3b4b
5
Контрольные вопросы
1. Как реализуется сложение чисел в СОК сумматорами?
2. Как реализуется сложение чисел в СОК просмотровой
таблицей?
5
- 31 -

Спутниковые и радиорелейные системы передачи данных
Цель занятия: изучение операции вычитания чисел в СОК.
Знания и умения, приобретаемые студентом в результате осво-
ения темы, формируемые компетенции или их части: ПК-1, ПК-7.
В результате освоения темы обучающийся должен
• знать: вычитание чисел в СОК сумматорами и просмотровой таблицей.
• уметь: вычитать числа в СОК по заданным основаниям.
• владеть: знаниями, умениями и навыками вычитания
чисел в СОК.
Теоретическая часть
Операция «вычитание» в СОК, как и сложение, считается
«хорошей» операцией. Она также допускает распараллеливание.
Для вычитания чисел в модулярной арифметике достаточно
вычесть остаток вычитаемого из остатка уменьшаемого и откорректировать разность (найти остаток от деления разности на соответствующее основание СОК) по каждому из оснований СОК.
Пример.
Пусть задана СОК с основаниями p
Рабочий диапазон этой СОК: P = p
то есть уменьшаемое, вычитаемое и разность примера должны
располагаться в диапазоне [0;104].
A = 75 = (75 mod 3, 75 mod 5, 75 mod 7) = (0,0,5).
B = 13 = (13 mod 3, 13 mod 5, 13 mod 7) = (1,3,6).
A – B = 75 – 13 = 62 = (62 mod 3, 62 mod 5, 62 mod 7) = (2,2,6).
С другой стороны, выполним независимо друг от друга три
операции модулярного вычитания, соответственно разрядов
уменьшаемого и вычитаемого в СОК.
1. (0 – 1) mod 3 = 2
2. (0 – 3) mod 5 = 2
3. (5 – 6) mod 7 = 6
В результате имеем СОК-тройку (2,2,6), разряды которой совпадают с разрядами числа 62 после его перевода в СОК.
= 3, p2 = 5, p3 = 7.
1
1*p2*p3
= 3*5*7 = 105,
- 32 -

Практическая работа 3
При выполнении операции поразрядного вычитания возни-
кает несколько неприятных моментов.
1. Примерно в половине случаев разность остатков – число
отрицательное. Несмотря на то, что вопрос представления отрицательных чисел в ЭВМ проработан хорошо,
это представляет некоторое неудобство.
2. Операция mod, используемая для корректировки разности, в явном виде замедляет расчеты, а применительно к
отрицательным разностям, становится еще менее производительной.
Тем не менее, выход есть.
Операция «вычитание» в модулярной арифметике, по сути
является сложением с противоположным элементом по соответствующему модулю (основанию СОК). То есть при инициализации вычислительной системы достаточно сформировать
несколько вспомогательных таблиц противоположных элементов по каждому из оснований СОК (возможна прошивка этих
таблиц в ПЗУ), а при выполнении операции вычитания, однотактовой выборкой заменять вычитаемое на противоположное
ему СОК-число и выполнять теперь вместо операции вычитания, операцию сложения, которая была рассмотрена ранее.
Пример.
Пусть задана СОК с основаниями p
= 3, p2 = 5, p3 = 7.
1
Рабочий диапазон этой СОК: [0; 104].
A = 75 = (75 mod 3, 75 mod 5, 75 mod 7) = (0, 0, 5).
B = 13 = (13 mod 3, 13 mod 5, 13 mod 7) = (1, 3, 6).
A – B = 75 – 13 = 62 = (62 mod 3, 62 mod 5, 62 mod 7) = (2, 2, 6).
neg(B) = (neg 1, neg 3, neg 6) = (2, 2, 1).
A – B = A + neg(B) = (0, 0, 5) + (2, 2, 1) = (2, 2, 6).
Ответ, как видно, получился правильный.
Еще один способ ускорения операции вычитания состоит в
создании дополнительных просмотровых таблиц вычитания,
полностью аналогичных таблицам сложения, при инициализации СОК. В этом случае операция вычитания будет производиться за один такт, но потребует большего количества памяти.
- 33 -

Спутниковые и радиорелейные системы передачи данных
Таблица «вычитания» по модулю 5
– 0 1 2 3 4
0 0 4 3 2 1
1 1 0 4 3 2
2 2 1 0 4 3
3 3 2 1 0 4
4 4 3 2 1 0
Задания для практической работы
Вычесть числа A = (a
, a2, a3, a4, a5) и B = (b1, b2, b3, b4, b5)
1
в СОК по заданным основаниям p1, p2, p3, p4, p5.
pp2p3p4p
1 7 19 23 43 59 3 5 8 41 13 1 4 21 24 19
2 3 13 37 41 71 2 0 1 2 5 1 2 35 30 0
3 2 17 31 43 61 0 8 25 32 60 0 3 1 16 2
4 5 17 37 47 71 0 0 36 19 29 3 9 23 6 42
5 2 13 37 47 61 0 8 9 0 45 0 5 1 38 1
6 3 13 29 41 71 0 9 14 7 23 2 1 13 31 67
7 2 17 37 53 71 0 2 32 33 9 1 4 13 14 11
8 5 11 29 53 59 0 8 27 25 23 3 5 4 17 42
9 2 13 37 41 67 0 11 3 15 47 0 11 18 28 52
10 2 11 37 41 67 0 10 10 18 44 0 3 22 29 64
11 5 11 37 41 67 1 7 23 19 45 3 4 28 22 13
12 7 17 37 43 61 0 7 29 16 56 0 14 13 28 24
13 7 11 31 41 61 0 1 29 34 30 6 5 0 25 14
14 2 19 23 41 59 1 8 1 0 6 0 12 9 31 26
15 2 11 37 41 61 1 9 16 14 36 0 4 34 12 19
16 2 17 37 41 67 1 7 8 25 10 0 2 16 29 5
17 2 17 31 43 67 0 10 12 24 46 1 14 21 30 60
18 7 19 31 47 71 0 2 21 36 58 3 13 26 17 59
19 2 17 31 41 71 0 6 14 6 56 0 16 24 26 12
20 5 13 23 53 71 4 0 0 2 1 0 6 19 36 28
21 5 17 23 47 67 2 1 0 12 4 4 1 6 40 32
22 2 17 29 41 59 1 9 5 29 41 0 0 18 19 56
23 5 13 23 53 61 0 9 5 20 28 3 5 20 10 52
5
aa2a3a4a
bb2b3b4b
5
5
- 34 -

Практическая работа 3
pp2p3p4p
5
aa2a3a4a
bb2b3b4b
5
24 2 11 37 53 71 0 9 36 6 67 0 6 36 5 28
25 2 19 29 47 59 1 1 27 29 33 0 14 15 7 4
26 2 17 37 41 67 1 9 12 28 45 0 0 34 11 6
27 3 13 31 43 71 1 8 26 28 16 1 8 7 31 63
28 2 13 23 47 59 1 7 21 28 46 0 11 14 41 44
29 2 19 29 41 61 0 3 28 7 23 0 18 4 29 43
30 5 17 29 41 61 0 16 23 16 50 1 7 16 39 29
31 2 13 37 41 67 0 0 19 14 55 0 2 17 11 29
32 3 17 31 47 61 2 12 14 46 33 2 10 10 39 57
33 3 13 37 47 71 2 12 24 28 1 0 7 19 43 33
34 3 19 23 47 67 0 0 21 37 16 2 5 0 29 24
35 5 17 29 47 59 2 7 11 14 8 0 12 27 44 25
36 2 19 37 47 71 0 10 4 17 3 0 17 20 0 49
37 7 11 23 53 61 4 7 2 3 0 1 6 3 13 59
38 7 17 29 41 71 0 14 22 7 46 2 11 5 1 12
39 2 11 23 47 71 0 9 20 28 33 1 8 2 8 28
40 3 19 29 53 67 0 0 12 11 5 1 10 8 43 64
41 3 17 29 43 67 2 0 0 32 31 0 12 10 30 47
42 5 11 31 43 59 3 7 10 0 27 3 6 26 23 19
43 5 17 23 53 71 2 1 6 14 43 0 12 2 41 5
44 7 17 29 43 67 0 13 23 35 37 2 6 8 30 31
45 2 19 29 43 71 0 3 5 35 13 1 9 6 29 41
46 3 19 29 43 59 0 6 25 9 26 0 12 27 30 46
3 17 23 41 67 0 1 6 37 29 0 4 0 37 60
47
48 2 19 37 47 59 1 12 7 31 57 1 14 24 4 6
49 2 13 37 47 71 1 3 17 39 42 0 10 26 34 59
50 7 17 37 53 67 6 15 30 5 39 4 13 22 19 20
51 3 19 23 43 61 0 10 7 9 10 2 11 7 3 25
52 2 11 31 43 67 0 5 26 40 9 1 6 0 23 7
53 2 17 29 47 67 0 7 8 45 18 1 0 25 17 24
54 7 11 31 43 71 1 8 12 29 0 6 7 4 9 41
55 3 17 37 43 71 0 2 5 27 30 2 5 12 5 40
56 3 17 23 43 61 1 11 5 18 32 0 16 1 9 1
57 5 11 37 53 61 2 8 9 49 46 0 6 11 43 58
58 3 13 23 41 71 2 0 1 35 62 2 11 1 26 37
59 3 17 23 47 67 0 12 19 4 4 0 0 0 10 36
5
- 35 -

Спутниковые и радиорелейные системы передачи данных
pp2p3p4p
5
aa2a3a4a
bb2b3b4b
5
60 2 19 31 43 67 0 0 13 10 42 1 14 23 31 56
61 3 11 29 53 61 1 3 10 25 16 1 4 2 20 14
62 3 17 29 47 59 1 4 14 40 41 2 10 5 42 53
63 7 19 37 41 71 3 0 3 13 43 0 16 14 14 0
64 3 13 37 41 67 0 11 15 37 54 0 7 33 29 13
65 3 13 37 47 71 0 9 13 18 45 0 0 0 4 56
66 2 13 29 43 61 1 10 12 28 4 0 6 26 16 27
67 2 13 37 47 61 0 2 29 16 2 0 8 24 11 21
68 5 19 37 43 71 3 6 17 29 48 1 3 15 12 70
69 5 17 29 47 59 0 12 17 39 52 4 11 12 13 22
70 5 13 29 41 61 2 8 27 27 15 0 10 22 36 38
71 7 13 29 47 67 2 4 22 35 10 2 3 13 8 37
72 7 17 37 43 71 4 3 30 40 30 3 2 8 36 52
73 7 17 23 41 71 5 6 10 33 57 5 12 7 26 15
74 5 17 37 53 71 3 4 30 38 15 3 5 24 50 62
75 5 13 37 47 61 2 4 6 4 33 1 9 8 36 27
76 5 13 31 53 61 4 2 12 22 16 4 7 9 28 1
77 7 11 29 47 59 6 3 2 37 23 4 1 22 6 19
78 2 13 31 41 67 0 2 1 15 59 1 7 25 11 17
79 3 11 23 43 61 0 5 0 18 13 0 3 4 2 37
80 5 17 31 43 71 4 6 29 30 56 3 14 15 11 48
81 2 11 37 47 67 0 10 4 5 1 0 1 1 22 0
82 3 17 37 43 61 0 11 28 3 9 0 9 23 7 12
83
3 19 31 47 61 1 14 12 17 28 0 13 14 13 0
84 2 11 31 41 67 1 8 8 27 18 1 6 5 9 44
85 7 17 31 47 71 3 6 1 41 23 5 13 20 41 24
86 3 19 29 53 59 2 2 3 4 27 1 10 13 22 15
87 3 13 23 47 67 2 10 20 43 19 0 5 18 39 60
88 5 17 37 47 71 1 16 33 8 42 2 8 5 30 57
89 2 17 29 43 61 1 11 0 39 7 0 5 23 3 35
90 2 19 29 41 71 0 13 13 31 55 0 4 24 34 18
91 5 17 29 53 61 1 4 18 52 43 0 3 5 14 30
92 7 13 29 43 71 6 6 11 17 49 5 3 28 7 49
93 5 11 37 53 59 2 2 11 43 24 2 10 7 51 32
94 5 13 31 53 59 2 6 2 46 38 4 4 22 30 22
5
- 36 -

Практическая работа 3
pp2p3p4p
95 3 19 23 41 59 0 6 22 13 45 0 3 10 8 25
96 2 19 37 43 61 1 16 34 35 9 1 17 11 23 5
97 7 13 23 47 61 0 12 3 42 19 4 0 10 37 50
98 2 11 23 53 71 0 5 9 7 35 0 0 4 28 52
99 5 19 23 43 71 4 1 9 10 47 2 1 20 42 65
100 2 19 31 41 71 1 16 9 18 29 1 6 6 31 3
5
aa2a3a4a
bb2b3b4b
5
Контрольные вопросы
1. Как реализуется вычитание чисел в СОК сумматорами?
2. Как реализуется вычитание чисел в СОК просмотровой
таблицей?
5
- 37 -

Спутниковые и радиорелейные системы передачи данных
Цель занятия: изучение операции умножения чисел в СОК.
Знания и умения, приобретаемые студентом в результате осво-
ения темы, формируемые компетенции или их части: ПК-1, ПК-7.
В результате освоения темы обучающийся должен
• знать: умножение чисел в СОК сумматорами дискретных логарифмов и просмотровой таблицей.
• уметь: умножать числа в СОК по заданным основаниям.
• владеть: знаниями, умениями и навыками умножения
чисел в СОК.
Теоретическая часть
Для перемножения чисел в модулярной арифметике достаточно умножить остаток первого сомножителя на остаток второго
сомножителя и откорректировать получившееся произведение
(найти остаток от деления произведения остатков на соответствующее основание СОК) по каждому из оснований СОК.
Операция «умножения» также допускает распараллеливание.
Пример.
Пусть задана СОК с основаниями p
Рабочий диапазон этой СОК: P = p
есть оба сомножителя и произведение должны располагаться в
диапазоне [0;104].
A = 6 = (6 mod 3, 6 mod 5, 6 mod 7) = (0, 1, 6).
B = 13 = (13 mod 3, 13 mod 5, 13 mod 7) = (1, 3, 6).
A*B = 6*13 = 78 = (78 mod 3, 78 mod 5, 78 mod 7) = (0, 3, 1).
С другой стороны, выполним независимо друг от друга три операции модулярного перемножения, соответственно разрядов СОК.
1. (0*3) mod 3 = 0
2. (1*3) mod 5 = 3
3. (6*6) mod 7 = 1
В результате имеем СОК-тройку (0, 3, 1), разряды которой
совпадают с разрядами числа 78 после его перевода в СОК.
= 3, p2 = 5, p3 = 7.
1
1*p2*p3
= 3*5*7 = 105, то
- 38 -

Практическая работа 4
Операция перемножения чисел в СОК имеет свои «подводные камни», а именно, внутримодульное перемножение остатков само по себе может оказаться громоздкой и неэффективной
операцией.
Например, если модули СОК, хотя бы и являются восьмибитовыми числами, но «велики» (например, p
= 251), то для
4
полноценного расчета произведения остатков (до коррекции
операцией mod) нужна будет 16-битовая арифметика. Дальнейшая корректировка 16-битового числа операцией mod еще более
«съест» вычислительные ресурсы (фактически нужно будет реализовывать на низком уровне операцию 16-битового деления).
Первый, очевидный способ решения задачи состоит в использовании таблиц умножения. Это быстрый способ, но он требует
большого количества дополнительной памяти для хранения таблиц модулярного умножения по каждому из оснований СОК и
поэтому не всегда может быть реализован (например, для 8-битового основания p
= 251 просмотровая таблица будет иметь
4
размер 251*251=63001 байт).
Второй, часто используемый способ, состоит в замене каждого сомножителя на его «индекс», последующем сложении индексов и обратном переводе получившихся сумм.
Пример.
Пусть задана СОК с основаниями p
= 3, p2 = 5, p3 = 7.
1
Рабочий диапазон этой СОК: [0, 104].
A = 6 = (6 mod 3, 6 mod 5, 6 mod 7) = (0, 1, 6).
B = 13 = (13 mod 3, 13 mod 5, 13 mod 7) = (1, 3, 6).
A*B = 6*13 = 78 = (78 mod 3, 78 mod 5, 78 mod 7) = (0, 3, 1).
Индексы чисел по модулю 3.
a
ind(a)
0 1 2
- 0 1
Индексы чисел по модулю 5.
a
ind(a)
0 1 2 3 4
- 0 1 3 2
- 39 -

Спутниковые и радиорелейные системы передачи данных
Индексы чисел по модулю 7.
a
ind(a)
0 1 2 3 4 5 6
- 0 2 1 4 5 3
ind(A) = (ind 0, ind 1, ind 6) = (-, 0, 3).
ind(B) = (ind 1, ind 3, ind 6) = (0, 3, 3).
Складываем индексы чисел A и B по модулям на 1 меньше
соответствующих оснований СОК.
ind(A) + ind(B) = (-, 0, 3) + (0, 3, 3) =
= (- mod 2, 3 mod 4, 6 mod 6) = (-, 3, 0).
Выполняем обратное преобразование по таблицам.
ind(a)
a
0 1 2
1 2 -
ind(a)
a
ind(a)
a
0 1 2 3 4
1 2 4 3 -
0 1 2 3 4 5 6
1 3 2 6 4 5 -
A*B = inv_ind(–, 3, 0) = (0, 3, 1).
Заметим, что остаток «0» не имеет индекса, но это не сильно мешает счету, так как перемножение любого числа на нуль
всегда дает в ответе нуль. Такой частный случай вычисляется
тривиально и мгновенно.
В результате опять получили СОК-тройку (0,3,1), разряды
которой совпадают с разрядами числа 78 после его перевода в
СОК. Скорость выполнения операции перемножения при этом
упала в 3–4 раза, но операция перемножения по прежнему допускает распараллеливание.
Способ перемножения чисел, основанный на теории индексов, также требует дополнительной памяти, но в гораздо более
скромных размерах, чем прямые просмотровые таблицы модулярного перемножения.
Наконец, существуют специализированные алгоритмы модулярного перемножения для каждого конкретного вида основания СОК. Они, как правило, работают быстро и практически
- 40 -
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
