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