Алгоритм шифрования подразумевает замену пары целых чисел.
Первое число заменяется на остаток от деления на m их суммы:
A = (a + b) % m.
Второе число заменяется на остаток от деления на m их произведения:
B = (a * b) % m.
Перед нами задача найти исходную пару чисел (a, b), зная, что шифр новой пары отличается от шифра прежней перестановкой чисел.
Чтобы решить эту задачу, будем последовательно подставлять значения из промежутка [2, m-1] вместо первого и второго чисел и проверять условие.
Рассмотрим возможные значения первого числа a.
Мы знаем, что a находится в промежутке [2, m-1].
Подставим вместо a каждое значение из этого промежутка и найдем соответствующее значение b, зная, что b = (a * B1^(-1)) % m, где B1 - первый зашифрованный вариант второго числа.
Проверим условие, что шифр новой пары отличается от шифра прежней перестановкой чисел:
(A, B) != (B1, B2),
где A = (a + b) % m,
B = (a * b) % m,
B1 и B2 - зашифрованные варианты второго числа до и после изменений.
Для каждого значения a проверяем это условие.
Если найдем такую пару (a, b), для которой условие удовлетворяется, то записываем значения a и b и заканчиваем перебор.
Итак, начинаем перебор:
Пусть m = 2400000.
Проходим циклом по a от 2 до м-1.
Перебираем значения a, вычисляем b по формуле b = (a * B1^(-1)) % m, где B1 - значение второго числа до изменений.
Находим A и B по формулам A = (a + b) % m и B = (a * b) % m.
Сравниваем полученные значения A и B со значениями после изменений (B1, B2) и проверяем условие (A, B) != (B1, B2).
Если условие выполняется, записываем значения и заканчиваем перебор.
После выполнения перебора получаем найденные значения исходной пары чисел (a, b).
Здесь представлен программный код для решения данной задачи на языке программирования Python:
m = 2400000
# Перебор значений a
for a in range(2, m):
# Найдем второе число до изменений
B1 = 1053159
# Найдем b по формуле b = (a * B1^(-1)) % m
b = (a * pow(B1, -1, m)) % m
# Найдем зашифрованные значения пары (a, b)
A = (a + b) % m
B = (a * b) % m
# Проверим условие (A, B) != (B1, B2)
if (A, B) != (B1, 1050658):
# Если условие выполняется, выводим значения и заканчиваем перебор
print(a, b)
break
После выполнения кода получаем исходную пару чисел (a, b):
a = 1355550
b = 1942500