Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №7

.pdf
Скачиваний:
1
Добавлен:
10.08.2024
Размер:
872 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищенных систем связи

Дисциплина Математические основы защиты информации

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №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