Лаб_09
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
ФАКУЛЬТЕТ КИБЕРБЕЗОПАСНОСТИ (КБ)
КАФЕДРА ЗАЩИЩЕННЫХ СИСТЕМ СВЯЗИ (ЗСС)
______________________________________________________________________________
Отчет
по лабораторной работе №9
«Китайская теорема об остатках»
Выполнили: студенты группы ИБС-32
Проверил:
доцент кафедры ЗСС к.т.н Кушнир Д.В.
Теоретическая часть
Согласно китайской теореме об остатках, система уравнений:
x= 1 mod 2 x= 2 mod 3 x= 6 mod 7
Имеет единственное решение на промежутке [0... 2*3*7], если числа 2,3,7 — взаимно простые.
Найдем решение на промежутке от 0 до 42 (перебором):
Решения первого уравнения: 1,3,5,7,9,11,...37,39,41, ... Решения второго уравнения: 2,5,8,11,...38,41,... Решения третьего уравнения: 6,13,20,27,34,41,...
Итоговое решение x=41.
Найдём аналитически решение системы уравнений:
x=1 mod 13 x=4 mod 15 x=8 mod 19
Выразим x из первого уравнения:
Выражение x=1 mod 13, можно записать в виде:
x=1+13*t, где t - некоторое произвольное целое.
Подставляем выражение для x из первого уравнения во второе уравнение:
x = 4 mod 15 1+13t = 4 mod 15 13t = 3 mod 15 t = 3/13 mod15
В модульной арифметике "нет такого понятия как деление", вместо деления необходимо производить умножение на обратный элемент.
t = 3*(13)(-1) mod15
Обратный элемент находят с помощью расширенного алгоритма Эвклида, для небольших чисел в демонстрационных целях можно использовать метод перебора на основе определения обратного элемента:
1*13=13 mod 15 2*13=11 mod 15 3*13= 9 mod 15 4*13= 7 mod 15 5*13= 5 mod 15 6*13= 3 mod 15 7*13= 1 mod 15 ... т.е. t = 3*(13)(-1) =3*7 mod 15
t = 6 mod 15
раскроем модуль:
t = 6 + 15*u, где u - целое число.
теперь подставим это в выражение для х:
x = 1+13t = 1 + 13(6 + 15u) = 79 + 195u
(таким образом, мы получили выражение для «х» с учетом двух уравнений).
Подставим найденное выражение для х в третье уравнение:
79+195u=8 mod19
5u=5mod19
u=5/5mod19 (тут можно было бы тоже не делить на 5, а умножать на обратное к 5 число, но выражение запись 5*5(-1)mod 19 всегда равно 1 по определению обратного элемента, т.е. получаем:
u = 1 mod 19 раскрываем модуль:
u = 1 + 19v, где v - целое число.
Подставляем в выражение для х
Итого с учетом всех трёх уравнений:
x = 79 + 195u = 79 + 195*(1 + 19v) = 274+3705v
Решение на промежутке [0 ... 13*15*19]=274, но есть и другие решения системы, вне промежутка, которые можно получить, принимая в качестве v значения 0, 1, 2, 3, …, …, …, … (В качестве v можно брать и отрицательные числа, что необходимо для решения некоторых задач).
Типичные задачи, которые можно решить на основе подобных подходов:
Задача 1: Как часто стрелки часов (секундная, минутная, часовая) сходятся вместе.
Задача 2: В какие моменты времени несколько спутников с разным периодом обращения вокруг Земли будут одновременно пересекать заданную долготу.
Китайская теорема об остатках может использоваться и в криптографии, как для выполнения процедур шифрования, так и для криптоанализа.
Решение на основе Китайской теореме об остатках:
Практическая часть
Задача 1
Для упрощения перебора напишем программу на языке питон:
per_r = int(input('первый ряд: ')) vtr_r = int(input('второй ряд: ')) tre_r = int(input('третий ряд: ')) ryad1, ryad2, ryad3 = [], [], [] for i in range(1, 106): if i%3 == per_r: ryad1.append(str(i)) for i in range(1, 106): if i%5 == vtr_r: ryad2.append(str(i)) for i in range(1, 106): if i%7 == tre_r: ryad3.append(str(i)) print(ryad1,ryad2,ryad3, sep='\n') for i in ryad1: for j in ryad2: for k in ryad3: if i==j and i==k and j==k: print('общий элемент: ', i)
Вариант 3
Лишние кубики 0, 2, 4
Имеем:
Первый ряд:
['3', '6', '9', '12', '15', '18', '21', '24', '27', '30', '33', '36', '39', '42', '45', '48', '51', '54', '57', '60', '63', '66', '69', '72', '75', '78', '81', '84', '87', '90', '93', '96', '99', '102', '105']
Второй ряд
['2', '7', '12', '17', '22', '27', '32', '37', '42', '47', '52', '57', '62', '67', '72', '77', '82', '87', '92', '97', '102']
Третий ряд:
['4', '11', '18', '25', '32', '39', '46', '53', '60', '67', '74', '81', '88', '95', '102']
общий элемент: 102
Вариант 16
Лишние кубики 2, 0, 5
Первый ряд
['2', '5', '8', '11', '14', '17', '20', '23', '26', '29', '32', '35', '38', '41', '44', '47', '50', '53', '56', '59', '62', '65', '68', '71', '74', '77', '80', '83', '86', '89', '92', '95', '98', '101', '104']
Второй ряд
['5', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80', '85', '90', '95', '100', '105']
Третий ряд
['5', '12', '19', '26', '33', '40', '47', '54', '61', '68', '75', '82', '89', '96', '103']
общий элемент: 5
Задача 2
Вариант 3 (аналитический способ)
Спутник1 пролетает над городом в x1=2 час и имеет период обращения y1=3 часов.
Спутник2 пролетает над городом в x2=3 час и имеет период обращения y2=5 часов.
Спутник3 пролетает над городом в x3=4 час и имеет период обращения y3=8 часов.
x = 2 (mod 3)
x = 3 (mod 5)
x = 4 (mod 8)
x = 2 + 3*t
2+3t = 3 mod 5
3t = 1 mod 5
t = 3-1 mod 5
t = 2 mod 5
t = 2 + 5*u
x = 2 + 3t = 2 + 3(2 + 5u) = 8 + 15u
8 + 15u = 4 mod 8
15u = -4 mod 8
15u = 4 mod 8
u = 7 * 4 mod 8
u = 4 mod 8
u = 4 + 8v
x = 8 + 15u = 8 + 15(4+8v) = 68 + 120v
Таким образом, решение на промежутке [0..3*5*8] = 68 (Все три спутника пролетят над городом через 68 часов)
Вариант 3 (Китайская теорема)
x = 2 (mod 3)
x = 3 (mod 5)
x = 4 (mod 8)
M = 3*5*8 = 120
M1 = 120/3 = 40, M2 = 120/5 = 24, M3 = 120/8 = 15
N1 = 1, N2 = 4, N3 = 7
x = 2*40*1 + 24*4*3 + 15*7*4 = 68 mod 120
Через 68 часов спутники пересекутся
Вариант 16 (Китайская теорема)
Спутник1 пролетает над городом в x1=1 час и имеет период обращения y1=7 часов.
Спутник2 пролетает над городом в x2=2 час и имеет период обращения y2=5 часов.
Спутник3 пролетает над городом в x3=3 час и имеет период обращения y3=9 часов.
x = 1 (mod 7)
x = 2 (mod 5)
x = 3 (mod 9)
M = 7*5*9 = 315
M1 = 315/7 = 45, M2 = 315/5 = 63, M3 = 315/9 = 35
N1 = 3, N2 = 3, N3 = 8
x = 1*45*3 + 2*63*3 + 3*35*8 = 93 mod 315
Через 93 часа спутники пересекутся
