1. 程式人生 > >乘法逆元及逆元求法

乘法逆元及逆元求法

###前置知識 >模運算:取餘運算,即a除以b得到的餘數,記為mod,又記為% >模運算過程中,加減乘都可以先對a,b進行%p,然後再進行加減乘,最後再%p,結果不變 >運算子優先順序,模運算和乘除法的運算子優先順序是一樣的 >同餘:a和b除以p得到的餘數相同,即p可以整除(a-b) ###乘法逆元的問題背景 >求解$\cfrac{a}{b} \mod p$的值,因為除法不能直接對a,b先取模再進相除,所以這邊就引入了逆元 逆元,可以理解為是在mod p意義下b的倒數,下文中將b的逆元記錄為inv[b] 以下是逆元的定義 $b \times inv[b] \equiv 1 \pmod p$ ###逆元的性質及其證明 **1.第一個性質** $\cfrac{a}{b} \equiv a \times inv[b] \pmod p$ 證明如下 $b \times inv[b] \equiv 1 \pmod p$ $(b \times inv[b]-1)\bmod p=0$ 由模運算的乘法性質$a \times b \bmod p=(a \bmod p) \times (b \bmod p)\bmod p$ 得到$\cfrac{a}{b}\times(b \times inv[b]-1)\bmod p=0$ $(a \times inv[b]- \cfrac{a}{b})\bmod p=0$ $a \times inv[b] \equiv \cfrac{a}{b} \pmod p$ **2.唯一性** 設b有兩個逆元c,d 則$a*c \equiv a*d \pmod p$ $(a*c-a*d)\pmod p=0$ $a(c-d) \mod p=0$ $a\% p \neq 0$ 由模運算的乘性質得到$c=d$ 所以b的逆元唯一 **3.可積性** $inv[a] \times inv[b]=inv[a \times b]$ 證明 $a*b * inv[ab]\equiv \pmod p$ 又因為$a*inv[a]\equiv 1$ $b*inv[b]\equiv 1$ 模運算乘性質易證可積性成立 **4.週期性** 求解$\cfrac{a}{b} \mod p$中b的逆元 一般預設b小於p,但是當b大於p的時候來求逆元,其實就是一個週期性 即$inv[k*p+r]=