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

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

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

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

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

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

Коли підходить цей алгоритм?
  • Чи рівняння має вигляд конгруенції axb(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, і, помноживши обидві частини рівняння на цей обернений елемент, ми отримаємо єдиний розв'язок.

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

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

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

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

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

axb(modn)a^\prime \cdot x \equiv b^\prime \pmod{n^\prime}

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

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

xi(x+in)(modn)for i=0g1x_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), або нулю.

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

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

ax+nk=b,a \cdot x + n \cdot k = b,

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

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

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

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