Перейти до основного вмісту

Лінійне конгруентне рівняння

Це рівняння має вигляд:

a⋅x≡b(modn),a \cdot x \equiv b \pmod n,

де aa, bb і nn — задані цілі числа, а xx — невідоме ціле число.

Потрібно знайти значення xx з проміжку [0,n−1][0, n-1] (зрозуміло, що на всій числовій прямій може бути нескінченно багато розв'язків, які відрізнятимуться один від одного на n⋅kn \cdot k, де kk — будь-яке ціле число). Якщо розв'язок не єдиний, то ми розглянемо, як отримати всі розв'язки.

Коли підходить цей алгоритм?
  • Чи рівняння має вигляд конгруенції a⋅x≡b(modn)a \cdot x \equiv b \pmod n з одним невідомим xx? (якщо це звичайне рівняння ax+by=cax + by = c в цілих → Лінійне діофантове рівняння)
  • Чи відомий розклад gcd⁡(a,n)\gcd(a, n), тобто можна перевірити, чи g=gcd⁡(a,n)g = \gcd(a, n) ділить bb (інакше розв'язку немає)?
  • Чи достатньо звести задачу до оберненого елемента за модулем, а не до системи конгруенцій з різними модулями? (якщо модулів кілька → Китайська теорема про остачі)

Розв'язок через знаходження оберненого елемента​

Спершу розглянемо простіший випадок, коли aa і nn є взаємно простими (gcd⁡(a,n)=1\gcd(a, n) = 1). Тоді можна знайти обернений елемент до aa, і, помноживши обидві частини рівняння на цей обернений елемент, ми отримаємо єдиний розв'язок.

x≡b⋅a−1(modn)x \equiv b \cdot a ^ {- 1} \pmod n

Тепер розглянемо випадок, коли aa і nn не є взаємно простими (gcd⁡(a,n)≠1\gcd(a, n) \ne 1). Тоді розв'язок існуватиме не завжди (наприклад, 2⋅x≡1(mod4)2 \cdot x \equiv 1 \pmod 4 не має розв'язку).

Нехай g=gcd⁡(a,n)g = \gcd(a, n), тобто найбільший спільний дільник чисел aa і nn (який у цьому випадку більший за одиницю).

Тоді, якщо bb не ділиться на gg, розв'язку немає. Справді, для будь-якого xx ліва частина рівняння a⋅x(modn)a \cdot x \pmod n завжди ділиться на gg, тоді як права частина на нього не ділиться, звідки випливає, що розв'язків немає.

Якщо ж gg ділить bb, то, поділивши обидві частини рівняння на gg (тобто поділивши aa, bb і nn на gg), ми отримаємо нове рівняння:

a′⋅x≡b′(modn′)a^\prime \cdot x \equiv b^\prime \pmod{n^\prime}

у якому a′a^\prime і n′n^\prime вже взаємно прості, а такі рівняння ми вже навчилися розв'язувати. Як розв'язок для xx ми отримуємо x′x^\prime.

Зрозуміло, що цей x′x^\prime буде розв'язком і вихідного рівняння. Проте він не буде єдиним розв'язком. Можна показати, що вихідне рівняння має рівно gg розв'язків, і виглядатимуть вони так:

xi≡(x′+i⋅n′)(modn)for i=0…g−1x_i \equiv (x^\prime + i\cdot n^\prime) \pmod n \quad \text{for } i = 0 \ldots g-1

Підсумовуючи, можемо сказати, що кількість розв'язків лінійного конгруентного рівняння дорівнює або g=gcd⁡(a,n)g = \gcd(a, n), або нулю.

Розв'язок за допомогою розширеного алгоритму Евкліда​

Ми можемо переписати лінійну конгруенцію у вигляді такого діофантового рівняння:

a⋅x+n⋅k=b,a \cdot x + n \cdot k = b,

де xx і kk — невідомі цілі числа.

Метод розв'язування цього рівняння описано у відповідній статті Лінійні діофантові рівняння, і він полягає у застосуванні розширеного алгоритму Евкліда.

Там також описано метод отримання всіх розв'язків цього рівняння з одного знайденого розв'язку, і, до речі, цей метод, якщо в нього уважно вдуматися, абсолютно еквівалентний методу, описаному в попередньому розділі.

Відеоматеріали​