
- •Алгоритмы поиска простых чисел Наивный перебор
- •Оптимизированный перебор делителей
- •Перебор с запоминанием найденных простых чисел
- •Решето Эратосфена
- •Колёсный метод
- •Шифры простой замены
- •1.1 Система шифрования Цезаря
- •1.2 Афинная система подстановок
- •1.3 Лозунговый шифр
- •1.4 Шифровальный квадрат Полибия
- •1.5 Шифровальная таблица Трисемуса
- •4Х8 «Сколько волка ни корми, он все в лес глядит »
- •2. Разработка программного продукта
- •2.1 Современные требования к программным продуктам
- •2.2 Обоснование выбора средств реализации
- •2.3 Предполагаемая структура разрабатываемого пп
- •3. Руководство пользователя, инструкция по инсталляции
- •3.1 Особенности запуска программы
- •3.3 Результат работы программы
- •Список литературы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ДОНБАССКАЯ ГОСУДАРСТВЕННАЯ МАШИНОСТРОИТЕЛЬНАЯ АКАДЕМИЯ
КАФЕДРА
КОМПЬЮТЕРНЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
курсовая работа
по дисциплине
«Теория алгоритмов»
ТЕМА: «Разработать программу для шифрования с использованием метода аффинного шифрования.»
|
|
|
Вариант: 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, где l∈N, причём l⩽√n, то есть 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
Обратите внимание: количество зачёркиваний у составного числа — это количество простых делителей (без учёта кратности).