数论倒数
ACM數論之旅6---數論倒數,又稱逆元(我整個人都倒了( ̄﹏ ̄))
?
數論倒數,又稱逆元(因為我說習慣逆元了,下面我都說逆元)
數論中的倒數是有特別的意義滴
你以為a的倒數在數論中還是1/a嗎
(???)哼哼~天真
?
先來引入求余概念
?
(a + ?b) % p = (a%p + ?b%p) %p ?(對)
(a ?-? b) % p = (a%p ?- ?b%p) %p ?(對)
(a ?* ?b) % p = (a%p * ?b%p) %p ?(對)
(a ?/ ?b) % p = (a%p ?/ ?b%p) %p ?(錯)
?
為什么除法錯的
證明是對的難,證明錯的只要舉一個反例
(100/50)%20 = 2 ? ? ? ≠ ? ? ?(100%20) / (50%20) %20 = 0
?
對于一些題目,我們必須在中間過程中進行求余,否則數字太大,電腦存不下,那如果這個算式中出現除法,我們是不是對這個算式就無法計算了呢?
答案當然是 NO?(>o<)
?
這時就需要逆元了
?
我們知道
如果
a*x = 1
那么x是a的倒數,x = 1/a
但是a如果不是1,那么x就是小數
那數論中,大部分情況都有求余,所以現在問題變了
a*x ?= 1 (mod p)
那么x一定等于1/a嗎
不一定
所以這時候,我們就把x看成a的倒數,只不過加了一個求余條件,所以x叫做 ? ?a關于p的逆元
?
比如2 * 3 % 5 = 1,那么3就是2關于5的逆元,或者說2和3關于5互為逆元
這里3的效果是不是跟1/2的效果一樣,所以才叫數論倒數
?
a的逆元,我們用inv(a)來表示
?
那么(a ?/ ?b) % p = (a * inv(a) ) % p = (a % p * inv(a) % p) % p
這樣就把除法,完全轉換為乘法了?(。?ω?),乘法超容易
?
?
?
?
?
?
?
?
?
正篇開始
?
逆元怎么求
(忘了說,a和p互質,a才有關于p的逆元)
?
?
?
?
?
?
方法一:
?
費馬曾經說過:不想當數學家的數學家不是好數學家(( ̄▽ ̄)~*我隨便說的,別當真)
費馬小定理
a^(p-1) ≡1 (mod p)
兩邊同除以a
a^(p-2) ≡1/a (mod p)
什么(,,? ? ?,,),這可是數論,還敢寫1/a
應該寫a^(p-2) ≡ inv(a) (mod p)
?
所以inv(a) = a^(p-2) (mod p)
這個用快速冪求一下,復雜度O(logn)(? ??_??)??
1 LL pow_mod(LL a, LL b, LL p){//a的b次方求余p 2 LL ret = 1; 3 while(b){ 4 if(b & 1) ret = (ret * a) % p; 5 a = (a * a) % p; 6 b >>= 1; 7 } 8 return ret; 9 } 10 LL Fermat(LL a, LL p){//費馬求a關于b的逆元 11 return pow_mod(a, p-2, p); 12 }
總結
- 上一篇: uscao 线段树成段更新操作及Laz
- 下一篇: 我有大天使,堕天使,武藏,珠后,穆图,雪