Майзаков Максим Александрович Разработка модулей автоматической генерации заданий с решениями по теме «Дискретное логарифмирование» диплом
Вид материала | Диплом |
Содержание1.2 Шаг младенца – шаг великана |
- Мозжевилов Максим Александрович Разработка модулей генерации заданий и решений по теме, 891.19kb.
- Дидин Максим Александрович Переславль-Залесский Гимназия 7 7 7 7 7 7 7 7 56 диплом, 189.17kb.
- Дидин Максим Александрович Переславль-Залесский Гимназия 10 8 3 10 10 15 8 64 диплом, 103.28kb.
- Разработка урока по теме: «Развитие мышления через постановку проблемно творческих, 84.71kb.
- Отчет о выполеннии ниокр по теме Разработка унифицированных функциональных модулей, 219.08kb.
- Методы подготовки тестов по информатике и программированию, 55.02kb.
- Лоскутов Савва Александрович г. Асбест >26,5 диплом, 483.81kb.
- От двоичного кодирования к системам автоматической генерации кода, 2820.18kb.
- Тест №1 (из 6 заданий); Тест №2 (из 5 заданий); Тест №3 (в двух вариантах из 10 заданий);, 336.57kb.
- Название проекта, 6.03kb.
1.2 Шаг младенца – шаг великана
В открытой литературе этот метод впервые был описан Шенксом (Daniel Shanks), ссылки на него известны с 1973 года. Это был один из первых методов, более быстрый чем метод прямого перебора.
Общая схема алгоритма такова:
Берем два целых числа m и k, таких что mk>p (как правило, m=k=). Затем вычисляются два ряда чисел:
a, ga, g2a, … , gm—1a (mod p)
gm, g2m, g3m, … , gkm (mod p)
(все вычисления произведены по модулю p).
Найдем такие i и j, для которых gia=gjm. Тогда x=jm—i.
Справедливость последнего равенства подтверждается следующей цепочкой, все вычисления в которой произведены по модулю p:
gx=gjm-i=gjm(gi)-1=gjma(gia)-1=gjma(gjm)-1=a.
Заметим, что числа i и j непременно будут найдены, поскольку при i=, j= выполняется jm—i=, причем km>p. То есть среди всех чисел вида jm—i обязательно содержится 0 < x ≤ p.
Замечание: Указанный метод можно применять для разыскания дискретных логарифмов в любой циклической группе порядка n.
Приведем этот метод в форме алгоритма.
Алгоритм «Шаг младенца-шаг великана»:
Вход: g - порождающий элемент конечной группы G порядка n; aG.
Ш.1. Вычислить m=.
Ш.2. Вычислить b=gm.
Ш.3. Вычислить последовательности ui=bi, vj=agj Для i,j=.
Ш.4. Найти i, j такие что ui=vj. x=mi—j mod n. Идти на Выход.
Выход: logga=x.
Одна из трудоемких частей этого алгоритма – это поиск на Шаге 4. Он может быть осуществлен несколькими способами:
- Сначала построить таблицу (i, ui), отсортировать ее по второй компоненте а затем произволить сравнения по мере нахождения компонент vj.
- Построить две таблицы (i, ui) и (j, vj), отсортировать каждую из них, а затем произвести поиск совпадений.
- Объединить u, v в одну таблицу, снабдив их номером в соответствующей последовательности и битом принадлежности к одной из двух последовательностей, а затем применить совместную сортировку.
Сложность данного алгоритма составляет O() умножений по модулю и O(log n) операций сравнения.
Пример:
Пусть n=229 (простое число), g=6, a=12.
Ш.1. m=16.
Ш.2. b=ga mod n =612 mod 229 = 183.
Ш.3. В этом примере вычислим сначала ряд ui, а затем будем вычислять компоненты vj до тех пор, пока не найдется совпадение.
i, j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
ui | 183 | 55 | 218 | 48 | 82 | 121 | 159 | 14 | 43 | 83 |
vj | 72 | 203 | 73 | 209 | 109 | 196 | | | | |
-
11
12
13
14
15
16
75
214
3
91
165
196
i=16, j=6. x=mi—j mod n = 250 mod 228 = 22.
Проверка:
622 mod 229= 12.
Ответ:
log612 mod 228 = 22.