一、不定方程
要求逆元,首先要知道什么是不定方程。
已知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)
在gcd(m1,m2,m3,...,mn) = 1(m1,m2,...,mn互质)时解同余方程组,求解x的最小非负整数解。
这时候设m = ∏(i = 1, n)mi,Mi = m/mi,
设 Miti = 1(mod mi) ,即ti为Mi在模mi情况下的逆元
因为m是m1~mn的公倍数,且Mi = m/mi,所以Mi是除了mi以外的m1~mn的公倍数,
k为除了i以外的1~n的中的整数,则 Mi = 0 (mod mk) ,即 mk | Mi
所以,aiMiti = 0 (mod mk) 所以只要模数是m1~mn之间且模数不是mi,aiMiti 就等于 0
因为我们定义 Miti = 1(mod mi)
所以 aiMiti = ai (mod mi),所以只要模数是mi,aiMiti 就等于ai
所以aiMiti只有在mod mi的时候才等于ai,mod 其它模数的时候都等于0
因此x = ∑(i = 1, n) aiMiti 时,对于每个方程组:
x = ai(mod mi)
代入x = ∑(i = 1, n) aiMiti 得
∑(i = 1, n) aiMiti = ai (mod mi)
在两边一起 mod mi,
设i = i1时
所以i只要不等于i1,aiMiti都等于0
所以 ai1 = ai1 (mod mi1)
所以x = ∑(i = 1, n) aiMiti 时,方程组有解
此时求出的x是特解,显然,x+km(k为整数)是通解。
易证如果要求最小整数解,只要把x对m取模即可。
中国剩余定理证毕Q.E.D