
Лабораторная работа №7
.pdf
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет Инфокоммуникационных сетей и систем
Кафедра Защищенных систем связи
Дисциплина Математические основы защиты информации
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №7
Алгоритмы разложения на множители
(тема отчета)
Информационная безопасность (10.03.01)
(код и наименование направления/специальности)
Студент: |
|
|
|
Ерохин А.Г. |
ИКБ-03 |
||
(Ф.И.О.) |
|
|
(подпись) |
Студент: |
|
|
|
Чистяков А.С. |
ИКБ-03 |
||
(Ф.И.О.) |
|
|
(подпись) |
Студент:
Пантюхин М.А. ИКБ-03
(Ф.И.О.) (подпись)
К.тех.н, доцент кафедры ЗСС: Кушнир Д.В.
(Ф.И.О.) (подпись)
Санкт-Петербург
2022

Часть 1. Основная теорема арифметики.
Всякое целое число n ≥ = единственным образом может быть представлено в виде:
= 1 1 2 2 …
где p1,p2,…,pk – простые, (1<p1<p2<…<pk), e1,e2,…,ek-натуральные числа. Замечание, если число делится нацело только на 1 и на себя, то такое число простое.
Алгоритм разложения на множители методом «перебора». Последовательно выполняем деление исследуемого числа n на числа: 2, 3, 4, 5, 6, 7, 8, …, √ . При выполнении деления можно учитывать признаки делимости на различные числа (2, 3, 4, 5, …) для сокращения числа операций.
Алгоритм разложения на множители Ферма.
Этот алгоритм пытается представить n=x2-y2, тогда n раскладывается на (x-y)*(x+y). Достаточно эффективен при близких сомножителях.
Шаг1. Принять x=[sqrt(n)], если n=x2 , то x делитель – окончание
алгоритма, иначе x=x+1 ([ … ]- обозначает взять |
целое). |
|
Шаг2. |
Если x=(n+1)/2 – n простое – окончание алгоритма, иначе |
|
вычисляем y=sqrt(x2-n). |
|
|
Шаг3. |
Если y целое, т.е. y2=x2-n,то решение |
найдено |
(n=(x+y)*(x-y)), иначе x=x+1 и переходим к шагу 2. |
|
Задание 1.
Выполнить попытку разложения на множители любого 4-х значного простого числа (взять любое из таблиц простых чисел) методом перебора. В отчёте показать вывод остатков от деления на каждом шаге алгоритма. Указать признак остановки алгоритма.
Для оптимизации перебора можно использовать признаки делимости (по желанию). Привести примеры признаков делимости на (2,3,4,5,6, можно добавить по желанию еще какие-нибудь).
Решение: n = 1487, тогда:
2

Остановка перебора чисел определяется числом, являющимся √ , то есть в
данном случае это √1487 ≈ 38,561, следовательно алгоритм перебирает множители от 1 до 38.
3
Признаки делимости:
Число делится на 2 тогда и только тогда, когда его последняя цифра делится на 2, то есть является чётной.
Пример:
34 — делится на 2, так как последняя цифра числа - чётная
Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3.
Пример:
75 — делится на 3, так как 7+5=12, и число 12 делится на 3 (12:3=4)
Число делится на 4 тогда и только тогда, когда две его последние цифры составляют число, которое делится на 4. Двузначное число делится на 4 тогда и только тогда, когда удвоенное число десятков, сложенное с числом единиц, делится на 4.
Пример:
4576 — делится на 4, так как число 76 делится на 4 (76:4=19)
Число делится на 5 тогда, когда последняя цифра делится на 5, т.е. если она 0 или 5.
Пример:
680, 233575 — делятся на 5, так как их последняя цифра равна 0 или 5
Число делится на 6 тогда и только тогда, когда оно делится и на 2, и на 3, то есть если оно четное и сумма его цифр делится на 3.
Пример:
462 — делятся на 6, по признаку делимости на 2 оно делится на 2 (последняя цифра 2 делится на 2), по признаку делимости на 3 оно делится на 3 (сумма цифр числа делится на 3: 4+6+2=12, 12:3=4)
Число делится на 9 тогда и только тогда, когда сумма его цифр делится на 9.
Пример:
4788 — делится на 9, так как сумма его цифр делится на девять (4+7+8+8=27)
Число делится на 10 тогда и только тогда, когда оно оканчивается на 0.
Пример:
460 — делится на 10, так как последняя цифра этого числа равна 0
4

Задание 2.
Выполнить аналогичные действия (см. Задание 1.) для любого числа, которое является произведением двух двухзначных (больших 50-ти) простых чисел (по Вашему выбору).
Решение: n = 67*73 = 4891, где 67 и 73 – простые числа, тогда:
Для решения заданий 1 и 2 была написанна программа на языке программирования C++.
5
Листинг:
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus"); int n, result, mod_n = 0, i = 1; cout << "Введит число: "; cin >> n;
cout.width(18); cout << "Частное"; cout.width(10);
cout << "Остаток" << endl; for (i; i <= sqrt(n); i++) {
cout << n << " / " ; cout.width(2); cout << i << " : "; result = n / i; mod_n = n % i; cout.width(4); cout << result; cout.width(10);
cout << mod_n << endl;
if ((i > 1) && mod_n == 0) { cout << endl;
cout << n << " - составное число" << endl;
cout << n << " = " << i << " * " << result << endl; return 0;
}
}
cout << endl;
cout << n << " - простое число" << endl;
}
Задание 3.
Разложить на множители (факторизовать), два числа из таблицы ниже, вариант выбирать по номеру студента в группе. Использовать алгоритм Ферма. Обратите внимание на примечание.
6

Вариант 7.
Первое число для факторизации: 5905333157.
Первый шаг. Необходимо выявить наличие третьего сомножителя. Для этого воспользуемся программой, представленной для заданий 1 и 2.
В результате работы программы, выявили отсутствие третьего сомножителя, следовательно, можно приступить к алгоритму Ферма.
Второй шаг. √5905333157 ≈ 76846,165, следовательно, = 76846
|
x |
x2 |
x2-n |
y = sqrt(x2-n) |
|
76846 |
5905307716 |
-25441 |
|
|
76847 |
5905461409 |
128252 |
358,12 |
|
76848 |
5905615104 |
281947 |
530,98 |
|
76849 |
5905768801 |
435644 |
660,03 |
|
76850 |
5905922500 |
589343 |
767,69 |
|
76851 |
5906076201 |
743044 |
862 |
Т.е. = |
76851, = 862. |
|
= (76851 + 862) (76851 − 862) = 77713 75989 Ответ: 5905333157 = 77713 75989
7

Второе число для факторизации: 383745989.
Первый шаг. Необходимо выявить наличие третьего сомножителя. Для этого воспользуемся программой, представленной для заданий 1 и 2.
В результате работы программы, выявили наличие третьего сомножителя: 383745989 = 11 34885999. Далее, можно приступить к алгоритму Ферма.
Второй шаг. √34885999 ≈ 5906,437, следовательно, = 5906
x |
x2 |
x2-n |
y = sqrt(x2-n) |
5906 |
34880836 |
-5163 |
|
5907 |
34892649 |
6650 |
81,54 |
5908 |
34904464 |
18465 |
135,89 |
5909 |
34916281 |
30282 |
174,02 |
5910 |
34928100 |
42101 |
205,19 |
5911 |
34939921 |
53922 |
232,21 |
5912 |
34951744 |
65745 |
256,41 |
5913 |
34963569 |
77570 |
278,51 |
5914 |
34975396 |
89397 |
298,99 |
5915 |
34987225 |
101226 |
318,16 |
5916 |
34999056 |
113057 |
336,24 |
5917 |
35010889 |
124890 |
353,39 |
5918 |
35022724 |
136725 |
369,76 |
5919 |
35034561 |
148562 |
385,43 |
5920 |
35046400 |
160401 |
400,51 |
5921 |
35058241 |
172242 |
415,02 |
5922 |
35070084 |
184085 |
429,05 |
5923 |
35081929 |
195930 |
442,64 |
5924 |
35093776 |
207777 |
455,83 |
5925 |
35105625 |
219626 |
468,64 |
5926 |
35117476 |
231477 |
481,12 |
5927 |
35129329 |
243330 |
493,28 |
5928 |
35141184 |
255185 |
505,16 |
8
|
5929 |
35153041 |
267042 |
516,76 |
|
5930 |
35164900 |
278901 |
528,11 |
|
5931 |
35176761 |
290762 |
539,22 |
|
5932 |
35188624 |
302625 |
550,11 |
|
5933 |
35200489 |
314490 |
560,79 |
|
5934 |
35212356 |
326357 |
571,28 |
|
5935 |
35224225 |
338226 |
581,57 |
|
5936 |
35236096 |
350097 |
591,69 |
|
5937 |
35247969 |
361970 |
601,64 |
|
5938 |
35259844 |
373845 |
611,43 |
|
5939 |
35271721 |
385722 |
621,07 |
|
5940 |
35283600 |
397601 |
630,56 |
|
5941 |
35295481 |
409482 |
639,91 |
|
5942 |
35307364 |
421365 |
649,13 |
|
5943 |
35319249 |
433250 |
658,22 |
|
5944 |
35331136 |
445137 |
667,18 |
|
5945 |
35343025 |
457026 |
676,04 |
|
5946 |
35354916 |
468917 |
684,77 |
|
5947 |
35366809 |
480810 |
693,41 |
|
5948 |
35378704 |
492705 |
701,92 |
|
5949 |
35390601 |
504602 |
710,35 |
|
5950 |
35402500 |
516501 |
718,68 |
|
5951 |
35414401 |
528402 |
726,91 |
|
5952 |
35426304 |
540305 |
735,05 |
|
5953 |
35438209 |
552210 |
743,11 |
|
5954 |
35450116 |
564117 |
751,07 |
|
5955 |
35462025 |
576026 |
758,96 |
|
5956 |
35473936 |
587937 |
766,77 |
|
5957 |
35485849 |
599850 |
774,49 |
|
5958 |
35497764 |
611765 |
782,15 |
|
5959 |
35509681 |
623682 |
789,73 |
|
5960 |
35521600 |
635601 |
797,24 |
|
5961 |
35533521 |
647522 |
804,68 |
|
5962 |
35545444 |
659445 |
812,06 |
|
5963 |
35557369 |
671370 |
819,37 |
|
5964 |
35569296 |
683297 |
826,61 |
|
5965 |
35581225 |
695226 |
833,81 |
|
5966 |
35593156 |
707157 |
840,92 |
|
5967 |
35605089 |
719090 |
847,99 |
|
5968 |
35617024 |
731025 |
855 |
Т.е. = |
5968, = 855. |
|
= (5968 + 855) (5968 − 855) = 6823 5113 Ответ: 383745989 = 6823 5113 11
9

Вариант 17.
Первое число для факторизации: 6087943019.
Первый шаг. Необходимо выявить наличие третьего сомножителя. Для этого воспользуемся программой, представленной для заданий 1 и 2.
В результате работы программы, выявили отсутствие третьего сомножителя, следовательно, можно приступить к алгоритму Ферма.
Второй шаг. √6087943019 ≈ 78025,271, следовательно, = 78025
|
x |
x2 |
x2-n |
y = sqrt(x2-n) |
|
78025 |
6087900625 |
-42394 |
|
|
78026 |
6088056676 |
113657 |
337,13 |
|
78027 |
6088212729 |
269710 |
519,34 |
|
78028 |
6088368784 |
425765 |
652,51 |
|
78029 |
6088524841 |
581822 |
762,77 |
|
78030 |
6088680900 |
737881 |
859 |
Т.е. = |
78030, = 859. |
|
= (78030 + 859) (78030 − 859) = 78889 77171 Ответ: 6087943019 = 78889 77171
10