关注我的公众号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