Арифметика по модулю действительно ничем не отличается от обычной арифметики. Ключом к решению проблемы, с которой вы столкнулись, является осознание того, что то, что вы обычно делаете для решения этой проблемы, все еще действует (в дальнейшем любое упоминание числа означает целое число):
Скажем, у вас есть
15 + х = 20
Способ решения этой проблемы заключается в понимании того, что обратное значение 15 при регулярном сложении равно -15, после чего вы можете написать (используя коммутативность и ассоциативность, как мы это обычно делаем)
15 + х + (-15) = (15 + (-15)) + х = 0 + х = х = 20 + (-15) = 5
так что ваш ответ х = 5
Теперь к вашей проблеме.
Скажите, что N и M известны, и вы ищете x при сложении по модулю k:
(N + x) mod k = M
Сначала поймите, что
(N + x) mod k = ((N mod k) + (x mod k)) mod k
и чтобы проблема имела смысл
М мод к = М
и
х мод к = х
так, чтобы
N mod k = N_k
и
(a + b) mod k = a + _k b
у вас есть
N_k + _k x = M
, что означает, что вам нужно инвертировать N_k под + _k. Это на самом деле довольно просто, потому что обратное значение + _k соответствует тому, что удовлетворяет этому уравнению:
N_k + _k ("-N_k") = 0
что на самом деле довольно просто, потому что для числа y такое, что 0 <= y <k </p>
(y + (k - y)) mod k = k mod k = 0
так что
"- N_k" = (k-N_k)
, а затем
N_k + _k x + _k "-N_k" = N_k + _k "-N_k" + _k x = 0 + _k x = x = M + _k "-N_k" = M + _k (k - N_k)
так что решение до
(N + x) mod k = M
есть
x = (M + (k - (N mod k))) mod k
и, в частности, для вашей проблемы
(12345600 + x)% 97 = 1
решается
x = (1 + (97 - (12345600 мод 97))) мод 97 = 76
Обратите внимание, что требование, согласно которому в вашем решении всегда должны быть две цифры, заложено, если k <100 </p>