取模除法(逆元)(费马小定理)(线性求逆元)
文章目錄
- 引言
- 逆元
- 費馬小定理
- 內容
- 應用
- 證明
- 線性求逆元
- thanks for reading!
引言
我們做題時經常會由于答案過大,被要求使答案對一個質數取模
我們都知道,加和乘對取模是沒有影響的
減法也只需要寫一個:
就可以啦
但是除法就很頭疼
怎么辦呢?
這里介紹一種比較簡單的利用費馬小定理求逆元實現取模除法的途徑
結合快速冪,每次復雜度為log級別
除此之外,還會介紹一種線性求逆元的方法
首先我們先要搞清楚什么是逆元和費馬小定理
逆元
乘法逆元,是指數學領域群G中任意一個元素a,都在G中有唯一的逆元a’,具有性質a×a’=a’×a=e,其中e為該群的單位元。——《百度百科》
通俗點說就是逆元與本身相乘等于1
逆元有一個性質:
除一個數等于乘這個數的逆元
比如在正常的乘法意義下,a/b=a*(1/b)
這也是我們實現取模除法的關鍵
也就是說,當我們要模質數p的條件下使答案除以一個數x時,我們只需要乘上x在模p意義下的逆元即可
所以我們要求出這個逆元,也就是要找到一個k,使:
x*k=1(mod p)
怎么求呢?
我們就要請出我們的費馬小定理啦
費馬小定理
內容
若p為質數且a、p互質,則——
ap-1=1(mod p)
應用
討論完逆元之后,
這個定理怎么用就很顯然啦
首先a若不與p互質,那一定是p的質數,乘完肯定是0
不互質時,結合前面逆元的式子,我們就可以有
k*a=1=ap-1
這樣就可以得到k:
k=ap-2
如果你只是想背結論,那么到這里你就已經下課了
不過背來的終究會忘!推出來才是自己的!
(雖然證明也可能會忘)
下面就是最好玩的證明了~
證明
我們只需要證明一下費馬小定理,其他就都是自己推的了
怎么證呢?
引入概念:
完全剩余系:從模n的每個剩余類中各取一個數,得到一個由n個數組成的集合,叫做模n的一個完全剩余系
這玩意有啥用?
別著急,慢慢看
我們還需要一個引理:
對于互質的a、p, 若i!= j(mod p),則a?*?i != a?*?j (mod p)
這個為什么?怎么證?
看起來就是要反證啦
假設ai=aj(mod p)
移一下項:
a(i-j)=0(mod p)
又因為a、p互質,a mod p不可能為0
所以
i-j=0(mod p)
這與i!= j(mod p)矛盾
證畢
有了完全剩余系和這個引理,我們可以干一些東西了
先構造一個完全剩余系A:
A={0,1,2,…,p-1}
然后,我們令每一項乘上一個a,得到集合B:
B={0,a,2a,3a,…(p-1)a}
因為a與p互質,A又是完全剩余系,其中的數模p互不相同
由剛才的引理可知,B中的元素模p也互不相同,又因為B中也有p個數,所以B也是一個模p的完全剩余系
然后我們又有一個很顯然的結論:
若a=b (mod p),c=d(mod p),那么
a?*?c = b?*?d(mod p)
這個很好證了,把每個數拆成k?*?p+x即可
所以我們把去掉模p=0的數后的A的所有數乘起來,B的所有數乘起來,它們得到的乘積還是關于p同余的
寫一下就是:
(p-1)!=ap-1?*?(p-1)!(mod p)
移一下項就是:
(p-1)!?*? (ap-1-1)=0(mod p)
因為p是質數,所以(p-1)!顯然模p不等于0
所以:
(ap-1-1)=0(mod p)
也就是:
ap-1=1(mod p)
證畢
線性求逆元
洛谷傳送門
如何在線性的時間復雜度求出[1,n]在模p意義下的逆元呢?
(和前面的條件一樣,p必須是質數)
首先,求i的逆元時,假設我們已經求出[1,i-1]的逆元
我們可以令:
r=p%i
也就是
p=(p/i)*i+r
因為p是質數,i不等于1時,r不等于0
由于等式右邊是p,所以不難得出:
(p/i)*i+r=0 (mod p)
等式兩邊同時乘 i-1?*?r-1,再移項,得:
i-1=-r-1*(p/i)
因為r<i,r的逆元已知
這樣就可以在O1的時間內求出i的逆元
從而做到在On的時間內求出[1,n]的逆元
thanks for reading!
(真的不點個贊再走嗎awa)
總結
以上是生活随笔為你收集整理的取模除法(逆元)(费马小定理)(线性求逆元)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江淮汽车 10 月纯电动乘用车销量合计
- 下一篇: 最小代价(区间dp)(ybtoj)