2026a

# gcdx


最大公因式与 Bézout 系数

函数库: TySymbolicMath

# 语法

(d, u, v) = gcdx(a, b)

# 说明

注意

现阶段 gcdx 函数仅能对属于 AbstractPolynomialLike 类型的符号变量进行操作,而不能对常用的 Num 或 Sym 类型符号变量操作。当您需要对多项式进行操作时,请尽量使用 @polyvar 或利用 polys、substitute 函数对符号表达式进行转换,转换为多项式表达式再对多项式表达式进行相关操作。

(d, u, v) = gcdx(a, b) 计算 a 和 b 的最大公(正)除数及其 Bézout 系数,即满足 ua+vb == d == gcd(a, b) 的整数系数 u 和 v。gcdx(a, b) 返回 (d, u, v)。 示例

# 示例

整数的最大公约数与 Bézout 系数

求整数的最大公约数及其 Bézout 系数。

using TySymbolicMath
gcdx(12, 42)
(6, -3, 1)

上例中,12 和 42 的最大公约数为 6,且 -3*12 + 1*42 = 6。

求 240 和 46 的最大公约数和 Bézout 系数。

gcdx(240, 46)
(2, -9, 47)
分数的最大公约数与 Bézout 系数

求分数的最大公约数及其 Bézout 系数。

using TySymbolicMath
gcdx(1//4,1//3)
(1//12, -1, 1)

上例中,1//4 和 1//3 的最大公约数为 1//12,且 1//3 * 1 + 1//4 * -1 = 1//12。

注意:对于非整数类型的(a,b)输入,只需要简单满足 ua+vb == d == gcd(a, b) 等式即可,因此 Bézout 系数具有多解。

注意:对于非整数类型的(a,b)输入,只需要简单满足 ua+vb == d == gcd(a, b) 等式即可,因此 Bézout 系数具有多解。

多项式的最大公约数与 Bézout 系数

找出以下多项式关于变量 x 的最大公约数和 Bézout 系数。

注意:gcdx 函数用于符号表达式时,输出参数的顺序有变化,即输出 (u, v, d) = gcdx(a, b) 使满足 a*u + b*v == d ,且 gcd(a,b) == c*d(c 为常数)。

using TySymbolicMath
@polyvar x
a = x^3 - 3*x^2 + 3*x - 1
b = x^2 - 5*x + 4
(u, v, d) = gcdx(a, b)
(-9 + 2x, 5x - 2x², 9 - 9x)

验证 a*u + b*v == d。

a*u + b*v == d
true
求解丢图番方程

解丢图番方程 30x + 56y = 8。

找到 30 和 56 的最大公约数和一对 Bézout 系数。

using TySymbolicMath
(d, u, v) = gcdx(30, 56)
(2, -13, 7)

u = -13 和 v = 7 满足 Bézout 的恒等式,(30*(-13)) + (56*7) = 2。

重写 Bézout 的恒等式,使其看起来更像原始方程。通过乘以 4 来完成此操作。使用 == 验证等式的两边是否相等。

u*30*4 + v*56*4 == 8
true

计算求解丢番图方程的 x 和 y 值。

x = u*4
y = v*4
x = -52

y = 28

# 输入参数

a - 输入
整数 | 分数 | 符号变量 | 符号表达式 | 符号函数

输入,指定为整数、分数、符号变量、表达式或函数。符号输入必须为 AbstractPolynomialLike 类型。

b - 输入
整数 | 分数 | 符号变量 | 符号表达式 | 符号函数

输入,指定为整数、分数、符号变量、表达式或函数。符号输入必须为 AbstractPolynomialLike 类型。

# 输出参数

d - 最大公因式
整数 | 分数 | 符号变量 | 符号表达式 | 符号函数

最大公因式,返回为整数、分数、符号变量、表达式或函数。

u - Bézout 系数
整数 | 分数 | 符号变量 | 符号表达式 | 符号函数

Bézout 系数,返回为整数、分数、符号变量、表达式或函数,满足 u*a + v*b == d == gcd(a, b)。

v - Bézout 系数
整数 | 分数 | 符号变量 | 符号表达式 | 符号函数

Bézout 系数,返回为整数、分数、符号变量、表达式或函数,满足 u*a + v*b == d == gcd(a, b)。

# 提示

  • Bézout 系数不是唯一定义的。gcdx 返回由扩展欧几里得算法计算的最小 Bézout 系数。对于有符号整数,这些系数 u 和 v 在 |u| < |y/d| 和 |v| < |x/d| 的意义上是最小的。此外,选择 u 和 v 的符号以使 d 为正。对于无符号整数,系数 u 和 v 可能接近它们的 typemax,然后其性质只能通过无符号整数的模运算保持。

# 另请参阅

gcd | factor | factors