1. 程式人生 > >進階數論(1)逆元

進階數論(1)逆元

簡寫 概念 spa html mod 快速 逆元 說明 enter

[背景]

我們知道根據隨時取模原理(a*b)mod p=( a mod p*b mod p)mod p。那麽對於除法有沒有(a/b)mod p=( a mod p/b mod p)mod p這個性質呢?很顯然是沒有的。這個時候,我們就有必要引入逆元這個概念。

[概念]

我們想,如果可以把(a/b)mod p轉化為(a*k)mod p就可以運用隨時取模。那麽這個k就是b在模p意義下的逆元(b,p字母含義在本篇文章通篇適用),簡寫為inv(b)。

[求逆元]

那麽對於一個數b,它的逆元時多少呢?我們可以類比倒數來解決這一問題。倒數的定義是這樣的:一個數除以另一個數,就相當於乘這個這個數的倒數。如5/6=5*(1/6),(1/6)就是6的倒數。對於一個數有

a*(a的倒數)=1

類比一下

b*inv(b)≡1(mod p)

此時我們如果想要知道k的值,我們需要再引入費馬小定理:如果p是一個質數,而整數a不是p的倍數,則有

a^(p-1)≡1(mod p)

那麽有

b*b^(p-2)≡1 (mod p)

那麽

inv(b)≡b^(p-2)(mod p)

有了這個等式,我們可以輕松用快速冪求得inv(b),但是我們還可以用擴展歐幾裏得來求逆元。但是由費馬小定理的前提可得b和p互質。也就說明如果b和p不互質,則b沒有在模p意義下的逆元,這在用擴展歐幾裏得中也是一個非常重要的前提。

2019-05-02 19:12:48

進階數論(1)逆元