线性方程定理

关注我的公众号c137Lab获取更多相关内容

在这里插入图片描述

线性方程定理

线性方程定理

​ 设 aabb 是非零整数,g=gcd(a,b)g=gcd(a,b) 方程
ax+by=g ax+by=g
总有一个整数解 (x1,y1)(x_1,y_1),它可由欧几里得算法得到。则方程中的每一个解可由
(x1+kbg,y1kag) (x_1+k\cdot \frac{b}{g},y_1-k\cdot \frac{a}{g})
得到,其中 kk 为任意整数.

使用欧几里得算法求解 ax+by=gcd(a,b)ax+by=gcd(a,b) 的步骤如下

我们将欧几里得定理写成如下表形式(左边为欧几里得定理,右边为计算线性方程的解):

1

以此递推,陆续得到一个如下形式的等式:
=a+b 最新余数=a的倍数+b的倍数
最终得到的非零余数等于 gcd(a,b)gcd(a,b) ,这就给出了方程的整数解。

举例计算:
60x+22y=gcd(60,22) 60x+22y=gcd(60,22)
使用欧几里得定理:
在这里插入图片描述
(4,11)(-4,11) 为方程的一个整数解。

接下来证明定理的第二部分:

证明:方程的 ax+by=gax+by=g 的通解可以由其中一个特解得出

将方程左右两端除以 gg
agx+bgy=1 \frac{a}{g}x+\frac{b}{g}y=1
假设(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2) 是方程的两个解,则有
agx1+bgy1=1,agx2+bgy2=1 \frac{a}{g}x_1+\frac{b}{g}y_1=1,\quad\frac{a}{g}x_2+\frac{b}{g}y_2=1
y1y_1乘以第二个方程,用 y2y_2乘以第一个方程,再做差就可以消去 bb
agx1y2agx2y1=y2y1 \frac{a}{g}x_1y_2-\frac{a}{g}x_2y_1=y_2-y_1
同理,用 x1x_1 乘以第二个方程,用 x2x_2乘以第一个方程可以消去 aa
bgx2y1bgx1y2=x2x1 \frac{b}{g}x_2y_1-\frac{b}{g}x_1y_2=x_2-x_1

k=x2y1x1y2k=x_2y_1-x_1y_2 得到:
x2=x1+kbg,y2=y1kag x_2=x_1+k\frac{b}{g},\quad y_2=y_1-k\frac{a}{g}
上式表示 (x2,y2)(x_2,y_2) 可由 (x1,y1)(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章