您的位置:首页 > 其它

数论概论笔记 第6章 线性方程与最大公因数

2013-03-15 20:19 204 查看
定理:形如 ax + by 的二元整数式的最小正整数等于 gcd(a, b),证明略;

由欧几里得算法,有:

a = q1 * b + r1r1 = a - q1 * b
b = q2 * r1 + r2r2 = b - q2 * r1 = -q2 * a + (1 + q1 * q2) * b
r1 = q3 * r2 + r3r3 = r1 - q3 * r2 = (1 + q2 * q3) * a - (q1 + q3 + q1 * q2 * q3) * b
…………
即对于所有 ri,有 ri = a的倍数 + b的倍数;

由以上定理,可得扩展gcd算法如下:

int extgcd(int a, int b, int &x, int &y)
{
if (b == 0) {x = 1, y = 0; return a;}
int d = extgcd(b, a % b, x, y);
int t = x; x = y; y = t - a / b * y;
return d;
}
证明如下:

设 g = gcd(a, b);

已知 i = n 时,有: g = r
* 1 + r[n + 1] * 0,即 x = 1, y = 0;

向上递推,得:x = 0, y = 1,即 g = r[n - 1] * 0 + r
* 1;

设 i = k 时,有 g = r[k] * x' + r[k + 1] * y',

则 i = k - 1 时,有 左边 = g, 右边 = r[k - 1] * y' + r[k] * (x' - floor( r[k - 1] / r[k] ) * r[k - 1]) * y';

由 r[i - 1] = q[k + 1] * r[k] + r[k + 1],q[k+ 1] = floor( r[i - 1] / r[i] ) 可知

右边 = r[k] * x' + r[k + 1] * y';

故 i = k - 1 时,等式成立;

当r[-2] = a, r[-1] = b 时,有 g = a * x + b * y成立。

又已知 gcd算法的正确性,则扩展gcd算法可由有限步计算得g = gcd(a, b),故扩展gcd算法正确。

证明完毕。

如假设 gcd(a, b) = 1,且(x1, y1) 为 a * x = b * y = 1的一组整数解,

则当k∈Z时,对数对 (x1 + k * b, y1 - k * a)也是原方程的一组整数解。

现证明k取不同的整数时可以得到所有解,证明如下:

设数对(x1, y1) 和(x2, y2) 为方程的两组解,即

a * x1 + b * y1 = 1, a * x2 + b * y2 = 1;

转化得:a * x1 * y2 - a * x2 * y1 = y2 - y1,b * x2 * y1 - b * x1 * y2 = y2 - y1;

令 k = x2 * y1 - x1 * y2,可得

x2 = x1 + k * b,y2 = y1 - k * a,即 (x2, y2) 可由 (x1, y1) 取不同的k值得到。

故由初始解(x1, y1) 通过取不同的k值可以得到原方程的每个解(x2, y2)。

证明完毕。

当 g = gcd(a, b) ≠ 1时,有

a * x + b * y = g,即 (a / g) * x + (b / g) * y = 1;

由以上结论,当数对 (x1, y1)为原方程的解时,将k∈Z带入数对(x1 + k * b / g, y1 - k * a / g) 可得方程的其他解。

线性方程定理:设a 与 b 是非零整数,g = gcd(a, b),方程总有一个整数解(x1, y1),它可由前述的扩展gcd算法求得,则方程的每一个解可由

(x1 + k * b / g, y1 - k * a / g)

得到,其中k ∈ Z。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: