标签:了解 为我 扩展欧几里得 gcd 理解 等价 exgcd 情况下 不定方程
要求逆元,首先要知道什么是不定方程。
已知a,b,c,求解x,y,形如ax + by = c 的方程就是不定方程。
不定方程有两种解的情况:
1.无解
2.存在且有无限的解
那么,如何判断解的情况呢?
这时候,只需要拿出gcd就可以了,
若gcd(a,b) | c,则方程存在解,为什么呢
因为我们要使用扩展欧几里得来求不定方程,我们都知道欧几里得是求
ax + by = gcd(a,b)
中的 x,y的,因此如果我们要把c代换成gcd(a,b)的话,c一定是gcd(a,b)的整数倍,因此gcd(a,b) | c,因此如果c不是gcd(a,b)的整数倍的话,该不定方程无解。
接下来,就要解这个方程了
因为之前我们得到c一定是gcd(a,b)的整数倍,所以设c = k * gcd(a,b),则 k * x 和 k * y就是方程的一组解,很好理解,因为我们要求
ax + by = c
代入扩展欧几里得
ax + by = gcd(a,b)
因为二者是等价的,且 c = k * gcd(a,b),所以两边同乘k
k * (ax + by) = k * gcd(a,b)
化简得
k * x * a + k * y * b = k * gcd(a,b)
将k * gcd(a,b) 等量代换为 c,得到
k*x * a + k*y * b = c
所以对于扩展欧几里得,k*x和k*y就是该不定方程的一个解。
现在有特解,需要求通解:
因为有了解,所以它存在无限的解,所以设t为任意常数代入扩展欧几里得方程,设p1a + q1b = gcd(a,b)
设p = p1 * t
q = q1 * t
显然,因为 p1a + q1b = gcd(a,b)
所以pa + qb = gcd(a,b) * t
两边同除以gcd(a,b)
得到pa / gcd(a,b) + qb / gcd(a,b) = t
两边同除t
得到p1a / gcd(a,b) + q1b / gcd(a,b) = 1
p1a / gcd(a,b) + q1b / gcd(a,b) = 1
p1*(a / gcd(a,b) ) + q1*(b / gcd(a,b)) = 1
根据之前扩展欧几里得的公式,在ax + by = c中,
c必须是gcd(a,b)的整数倍,现在c = 1,gcd(a,b) = gcd( a / gcd(a,b) , b / gcd(a,b) )
所以c必须是gcd( a / gcd(a,b) , b / gcd(a,b) )的整数倍,且 c = 1,所以gcd( a / gcd(a,b) , b / gcd(a,b) ) 只能等于1,
所以a / gcd(a,b) 和 b / gcd(a,b)必须是互质的,这样方程才有解。
知道了判断条件后,我们就可以用扩展欧几里得求不定方程的通解。
接下来需要了解一个概念,叫做同余:
如果 a mod m = b mod m,则称 a,b 在模 m 的意义下同余
可以写成 a ≡ b(mod m)
同余有以下的性质:
a ≡ a(mod m)
若 a ≡ b(mod m),则 b ≡ a(mod m)
若 a ≡ b(mod m); b ≡ c(mod m),则 a ≡ c(mod m)
若 a ≡ b(mod m), c ≡ d(mod m),则
a + c ≡ b + d(mod m)
a - c ≡ b - d(mod m)
ac ≡ bd(mod m)
通过上述定义,可以得出ax ≡ 1(mod m) 这个同余方程
等同于求解不定方程 ax - my = 1
所以求解ax ≡ 1(mod m)就变成了求解ax - my = 1,所以求解同余方程相当于求解不定方程。
这时候,我们可以引入逆元的定义:
逆元素是指一个可以取消另一给定元素运算的元素,
所以设a的逆元为x,则
ax = 1
在模m的情况下则为
ax ≡ 1(mod m)
这恰恰是一个同余方程,所以可以转化为ax - my = 1,用exgcd求解这个不定方程。
那么如何求解同余方程组呢?
同余方程组:
x ≡ a1(mod m1)
x ≡ a2(mod m2)
...
x ≡ an(mod mn)
解同余方程组,求解x的最小非负整数解。
标签:了解 为我 扩展欧几里得 gcd 理解 等价 exgcd 情况下 不定方程
原文地址:https://www.cnblogs.com/dudujerry/p/11620728.html