要求逆元,首先要知道什麼是不定方程。html
已知a,b,c,求解x,y,形如ax + by = c 的方程就是不定方程。spa
不定方程有兩種解的狀況:htm
1.無解blog
2.存在且有無限的解get
那麼,如何判斷解的狀況呢?it
這時候,只須要拿出gcd就能夠了,class
若gcd(a,b) | c,則方程存在解,爲何呢擴展
由於咱們要使用擴展歐幾里得來求不定方程,咱們都知道歐幾里得是求gc
ax + by = gcd(a,b)co
中的 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