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

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

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

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

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

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

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

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

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

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №8

Проверка заданного числа (простое или составное)

(тема отчета)

Информационная безопасность (10.03.01)

(код и наименование направления/специальности)

Студент:

 

 

 

Ерохин А.Г.

ИКБ-03

(Ф.И.О.)

 

 

(подпись)

Студент:

 

 

 

Чистяков А.С.

ИКБ-03

(Ф.И.О.)

 

 

(подпись)

Студент:

Пантюхин М.А. ИКБ-03

(Ф.И.О.) (подпись)

К.тех.н, доцент кафедры ЗСС: Кушнир Д.В.

(Ф.И.О.) (подпись)

Санкт-Петербург

2022

Часть 1. Проверка числа методом перебора возможных

делителей.

Всякое целое число n ≥ = единственным образом может быть представлено в виде:

=

1

2

1

2

 

где p1,p2,…,pk – простые, (1<p1<p2<…<pk), e1,e2,…,ek-натуральные числа. Замечание, если число делится нацело только на 1 и на себя, то такое число простое.

Алгоритм разложения на множители методом «перебора».

Последовательно выполняем деление исследуемого числа n на числа: 2, 3, 4, 5, 6, 7, 8, …, . При выполнении деления можно учитывать признаки делимости на различные числа (2, 3, 4, 5, …) для сокращения числа операций.

Задание

1.Выбрать два простых и два составных нечетных числа (не кратных 3, 5 и 7) и еще одно составное число Кармайкла. Выбирать числа для выполнения задания по следующей формуле:

Вычисляем: X=((студента в группе)+110)*23. Далее произвольно в диапазоне X±20 выбрать нужные числа (если в бригаде один студент, то проверяем 4-ые числа, если два, то 8, если три то 12). Число Кармайкла выбирать по следующему алгоритму:

студент в группе с номером 1. Берёт число 1105 студент в группе с номером 2. Берёт число 1729 студент в группе с номером 3. Берёт число 2465 студент в группе с номером 4. Берёт число 2821 студент в группе с номером 5. Берёт число 6601 студент в группе с номером 6. Берёт число 8911

для студентов с большими номерами выбирать число Кармайкла циклически, 7-й берёт опять число 1105 и т.п. Сколько человек в бригаде, столько разных чисел Кармайкла должно быть проверено.

2.Проверить каждое из этих чисел методом перебора возможных делителей. По желанию возможно использовать предварительную проверку по признакам делимости на 3, 5, 7 и 11. Проверять выбранные числа по признакам делимости можно «вручную» или программно.

2

Вариант 7.

По формуле составим числа для проверки: X = (7+110) * 23 = 2691 Простые числа: 2707 и 2689 Составные числа: 2701 и 2717 Число Кармайкла: 1105

Проверим программно числа (являются они простыми или составными): Для числа 2707 получаем:

Для числа 2701 получаем:

3

Для числа 2689 получаем:

Для числа 2717 получаем:

Для числа Кармайкла = 1105 получаем:

4

Вариант 17.

По формуле составим числа для проверки: X = (17+110) * 23 = 2921 Простые числа: 2939 и 2917 Составные числа: 2921 и 2911 Число Кармайкла: 6601

Проверим программно числа (являются они простыми или составными): Для числа 2939 получаем:

Для числа 2921 получаем:

5

Для числа 2917 получаем:

Для числа 2911 получаем:

6

Для числа Кармайкла = 6601 получаем:

Вариант 24.

По формуле составим числа для проверки: X = (24+110) * 23 = 3082 Простые числа: 3083 и 3067 Составные числа: 3091 и 3077 Число Кармайкла: 8911

Проверим программно числа (являются они простыми или составными): Для числа 3083 получаем:

7

Для числа 3091 получаем:

Для числа 3067 получаем:

8

Для числа 3077 получаем:

Для числа Кармайкла = 8911 получаем:

9

Для выполнения данного задания была написана программа на языке программирования C++.

Листинг:

#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; return 0;

}

}

cout << endl;

cout << n << " - простое число" << endl;

}

10