Скачиваний:
46
Добавлен:
09.12.2017
Размер:
265.18 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ДОНБАССКАЯ ГОСУДАРСТВЕННАЯ МАШИНОСТРОИТЕЛЬНАЯ АКАДЕМИЯ

КАФЕДРА

КОМПЬЮТЕРНЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

курсовая работа

по дисциплине

«Теория алгоритмов»

ТЕМА: «Разработать программу для шифрования с использованием метода аффинного шифрования.»

Вариант: 21

Выполнил:

студент группы ИТ 14 - 1

Тищенко П. П.

_______________

(подпись)

Руководитель:

Богдан М.П.

________________

(подпись)

Дата защиты

Оценка

Подписи преподавателей

работы

г. Краматорск 2015 г.

С О Д Е Р Ж А Н И Е

Аннотация……………………………………………………………………………….3

Алгоритмы поиска простых чисел……………………………………………….……..4

1 Шифры простой замены………………………………………………….…………11

1.1 Система шифрования Цезаря………………………………………………….…….11

1.2 Аффинная систма подстановки…………………………………………………...…12

1.3 Лозунговый шифр………………………………………………………………….....12

1.4 Шифровальный квадрат Полибия…………………………………………………..13

1.5 Шифровальная таблица Трисемиуса………………………………………………..14

2 Разработка программного продукта……………………………………………...….15

2.1 Современные требования к программному продукту ……………………………..15

2.2 Обоснование выбора средств реализации…………………………………...……..15

2.3 Предлагаемая структура разработки ПП……………………………………………..15

3 Руководство пользователя……………………………………………………...……..16

3.1 Особенности запуска программы….…………………………………………………...16

3.2 Особенности работы с программой……………………………………..………………16

3.3 Результат работы программы……………………………………………..…………….16

Вывод…………………………………………………………………………………………..17

Список литературы……………………………………………………………………………18

Приложение А…………………………………………………………………………..… …19

Разработать программу для шифрования с использованием афинной системы.

АННОТАЦИЯ

Курсовая работа по дисциплине «Теория алгоритмов» на тему: " Алгоритмы поиска простых чисел" студента группы ИТ14–1 Тищенко Павла Петровича содержит страниц машинописного текста 21, рисунков 7, таблиц 6, страниц приложения 3.

В работе рассмотрены алгоритмы поиска простых чисел, основные понятия и особенности. Также рассмотрены алгоритмы шифрования/дешифрования шифрами сложной замены. Разработано программное средство для шифрования/дешифрования аффинным методом . Составлена инструкция по эксплуатации программы и описан алгоритм выполнения.

Теория алгоритмов, аффинный метод шифрования, алгоритмы поиска простых чисел.

Алгоритмы поиска простых чисел Наивный перебор

Наиболее наивный подход к поиску простых чисел заключается в следующем. Будем брать по очереди натуральные числа n, начиная с двойки, и проверять их на простоту. Проверка на простоту заключается в следующем: перебирая числа k из диапазона от 2 до n−1, будем делить n на k с остатком. Если при каком-то k обнаружится нулевой остаток, значит, n делится на k нацело, и число n составное. Если же при делении обнаруживались только ненулевые остатки, значит, число простое; в этом случае выводим его на экран. Ясно, что, получив нулевой остаток (тем самым обнаружив, что n составное), следует отказаться от дальнейших проб на делимость.

Заметим, что все простые числа, за исключением двойки, нечётные. Если обработать особо случай n=2, то все последующие числа n можно перебирать с шагом 2. Это даст приблизительно двукратное увеличение производительности программы.

Оптимизированный перебор делителей

Ещё одно улучшение возникает благодаря следующему утверждению: наименьший делитель составного числа n не превосходит n. Докажем это утверждение от противного. Пускай число k является наименьшим делителем n, причём k>√n. Тогда n=kl, где lN, причём ln, то есть l также является делителем числа n, кроме того, меньшим, чем k, а это противоречит предположению. Всё это означает, что, перебирая потенциальные делители, можно оборвать перебор, когда k достигнет n: если до этого момента делителей не найдено, то их нет вообще. Кстати, при проверке на простоту числа 11 это наблюдение позволяет сократить перебор более чем в три раза, а для числа 1111111111111111111 — более чем в 1054092553 раза (оба числа — простые).

Перебор с запоминанием найденных простых чисел

Существенно сократить перебор возможных делителей можно, пожертвовав памятью во время исполнения программы. В основе этой оптимизации лежит следующее утверждение: наименьший собственный делитель k составного числа n (то есть отличный от единицы и от самого n) является простым. Докажите самостоятельно.

Поскольку при проверке числа n на простоту важен именно наименьший собственный делитель, делители следует искать среди простых чисел, перебирая их по порядку. Но где взять их список? Ответ прост: поскольку наша программа будет искать все простые числа по порядку, кроме вывода на экран будем добавлять их в список найденных простых. Для очередного n будем перебирать потенциальные делители только из этого списка, по-прежнему, вплоть до n.

Издержкой этого подхода является необходимость держать в памяти растущий список найденных простых чисел. Однако объём требуемой для этого памяти будет невелик по сравнению с громадным выигрышем в быстродействии. Следующая таблица даёт представление об экономии при переборе и о затратах памяти:

n

количество k⩽√n

количество простых k⩽√n

10

3

1

100

10

4

1000

31

10

10000

100

25

100000

316

65

1000000

1000

168

Рис.1

Решето Эратосфена

Другой алгоритм поиска простых чисел приписывают древнегреческому учёному Эратосфену Киренскому(Έρατοσθένης).

Расположим числа от 2 до n в таблицу (решето) и зачеркнём сначала чётные числа, следующие после двойки. Двойку обведём. Затем найдём следующее после двойки незачёркнутое число (это будет тройка), обведём его, и зачеркнём каждое третье число после тройки (начиная с шести). После этого снова найдём первое после тройки незачёркнутое число (пятёрку), и после него зачеркнём каждое пятое (начиная с десяти). Будем повторять подобные действия, пока в таблице не останутся либо обведённые, либо зачёркнутые числа. Обведённые числа будут в точности простыми:

Рис.2

Обратите внимание: количество зачёркиваний у составного числа — это количество простых делителей (без учёта кратности).