關注我的公衆號c137Lab獲取更多相關內容
線性方程定理
線性方程定理
設 a a a 與 b b b 是非零整數,g = g c d ( a , b ) g=gcd(a,b) g = g c d ( a , b ) 方程
a x + b y = g
ax+by=g
a x + b y = g
總有一個整數解 ( x 1 , y 1 ) (x_1,y_1) ( x 1 , y 1 ) ,它可由歐幾里得算法得到。則方程中的每一個解可由
( x 1 + k ⋅ b g , y 1 − k ⋅ a g )
(x_1+k\cdot \frac{b}{g},y_1-k\cdot \frac{a}{g})
( x 1 + k ⋅ g b , y 1 − k ⋅ g a )
得到,其中 k k k 爲任意整數.
使用歐幾里得算法求解 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) a x + b y = g c d ( a , b ) 的步驟如下
我們將歐幾里得定理寫成如下表形式(左邊爲歐幾里得定理,右邊爲計算線性方程的解):
以此遞推,陸續得到一個如下形式的等式:
最 新 餘 數 = a 的 倍 數 + b 的 倍 數
最新餘數=a的倍數+b的倍數
最 新 餘 數 = a 的 倍 數 + b 的 倍 數
最終得到的非零餘數等於 g c d ( a , b ) gcd(a,b) g c d ( a , b ) ,這就給出了方程的整數解。
舉例計算:
60 x + 22 y = g c d ( 60 , 22 )
60x+22y=gcd(60,22)
6 0 x + 2 2 y = g c d ( 6 0 , 2 2 )
使用歐幾里得定理:
則 ( − 4 , 11 ) (-4,11) ( − 4 , 1 1 ) 爲方程的一個整數解。
接下來證明定理的第二部分:
證明:方程的 a x + b y = g ax+by=g a x + b y = g 的通解可以由其中一個特解得出
將方程左右兩端除以 g g g :
a g x + b g y = 1
\frac{a}{g}x+\frac{b}{g}y=1
g a x + g b y = 1
假設( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) ( x 1 , y 1 ) , ( x 2 , y 2 ) 是方程的兩個解,則有
a g x 1 + b g y 1 = 1 , a g x 2 + b g y 2 = 1
\frac{a}{g}x_1+\frac{b}{g}y_1=1,\quad\frac{a}{g}x_2+\frac{b}{g}y_2=1
g a x 1 + g b y 1 = 1 , g a x 2 + g b y 2 = 1
用 y 1 y_1 y 1 乘以第二個方程,用 y 2 y_2 y 2 乘以第一個方程,再做差就可以消去 b b b :
a g x 1 y 2 − a g x 2 y 1 = y 2 − y 1
\frac{a}{g}x_1y_2-\frac{a}{g}x_2y_1=y_2-y_1
g a x 1 y 2 − g a x 2 y 1 = y 2 − y 1
同理,用 x 1 x_1 x 1 乘以第二個方程,用 x 2 x_2 x 2 乘以第一個方程可以消去 a a a :
b g x 2 y 1 − b g x 1 y 2 = x 2 − x 1
\frac{b}{g}x_2y_1-\frac{b}{g}x_1y_2=x_2-x_1
g b x 2 y 1 − g b x 1 y 2 = x 2 − x 1
令 k = x 2 y 1 − x 1 y 2 k=x_2y_1-x_1y_2 k = x 2 y 1 − x 1 y 2 得到:
x 2 = x 1 + k b g , y 2 = y 1 − k a g
x_2=x_1+k\frac{b}{g},\quad y_2=y_1-k\frac{a}{g}
x 2 = x 1 + k g b , y 2 = y 1 − k g a
上式表示 ( x 2 , y 2 ) (x_2,y_2) ( x 2 , y 2 ) 可由 ( x 1 , y 1 ) (x_1,y_1) ( x 1 , y 1 ) 得到
接下來使用代碼實現這一算法:
def linear_equ ( a, b) :
if a == 0 or b == 0 :
return - 1
else :
g, w = a, b
x, v = 1 , 0
while w != 0 :
t = g % w
s = x - ( g // w) * v
x, g = v, w
v, w = s, t
y = ( g - a * x) // b
return g, x, y
參考文獻:A Brief Introduction to Number Theory --Joseph H.Silverman