同余與逆元


同余

  • 前置知識 ————擴展歐幾里得定理

  • 什么是同余

    對於兩個數a,b,它們對於p取模結果相同,那么就稱a和b在對p取模意義下同余
  • 公式表達

    \(\color{red}{a≡b(mod)p}\)
  • 如何求一個數的同余

    利用擴展歐幾里得定理
    我們將該公式轉化一下 -> \(a\%p == b\%p\)
    再變一下 -> \(a\%p - b\%p == 0\)
    再變一下 -> \(a\%p + (-b\%p) ==0\)
    誒,這個時候我們可以發現這個和擴歐的公式好像啊\((ax+by==c)\)
    那么是不是將其看成擴歐就可以解決了呢
    事實是————是的
    但是我們知道可以用擴歐求出一個同余來了,但是好像還是不知道怎么求,也不知道同余可以干什么啊
    事實上,在平常的寫題中沒有系數的同余都是很少出現的,一般同余是這么出現的-----
    \(ax≡b\%p\) 它會告訴你一個系數再讓你去求解
    更特殊的,\(b\)會等於1,這個時候,就扯到逆元上了

逆元

  • 什么是逆元

形如\(ax≡1\ mod\ p\)\(x\)我們就稱\(x\)\(a\)\(mod\ p\)意義下的一個逆元,即\(a\)乘以\(x\)\(mod\ p\)的答案是1

  • 逆元有什么用

    在部分對一個很大的數字取模防止答案爆\(long long\)以至於表達不出來的題目中,有時會發現會用到除法,可是用整數除法會有問題啊,那怎么辦呢又是那怎么辦呢
    這個時候逆元就派上用場了
    我們發現,\(ax\ mod\ p == 1\) 時,這個x等於 \(\frac{1}{a}\)時就是一個最明顯的滿足條件的逆元,可是\(\frac{1}{a}\)不是一個整數啊,那怎么辦呢?
    實際上,一個數對於另一個數取模時,它的逆元是有無數個的,只不過\(\frac{1}{a}\)是最小的一個,也就是說,還會有\(ay \mod p == 1\)的存在,
    而這個時候,由於要對p取模,那么我們的a乘以x和乘以y的效果都是一樣的,所以\(\frac{1}{a}\)可以被另一個常數y所代替,再想開一點,是不是所有的常數在對p取模時乘以\(\frac{1}{a}\)時都可以被y所代替呢, 由於p是不變的,所以這個結論是正確的

  • 如何求逆元

    • 求逆元有三種方式
      前面說過,有一種是可以用\(ex\_gcd\)來求的
      另外兩種分別是費馬小定理(有局限性,但是非常簡單)和線性推逆元(線性的去求逆元,適用於大規模求逆元)
      • \(ax ≡ 1 mod\ b\)
      • \(ax \% b == 1\)
      • \(ax - ax/b*b == 1\)
      • \(設y為ax/b,ax + (b(-y)) == 1\)
      • \(以下y為-y\)
      • \(ax + by == gcd(a,b)\)
      • 這個公式就可以套用擴歐了,下面再推一次擴歐
        \(gcd(a,b) == gcd(b,a\%b) == gcd(b,a-a/b*b)\)
        \(ax + by == gcd(b,a-a/b*b) == bx'+(a-a/b*b)y'\)
        \(ax + by == bx' + ay' - a/b*y'\)
        \(ax + by == ay' + b(x'-a/b*y)\)
        \(x = y',y = x' - a / b*y\)

    由此,我們可以得出求一個數的逆元的公式了
    \(ex\_gcd(a,mod,ni,x)\)//\(a\)為要求的數的逆元,\(mod\)為模數,\(ni\)為逆元,\(x\)什么都不是
    \(ni=(ni+mod)\%mod\);//防止負數


總結

  • 同余是當兩個數都模一個p它們的余數相同,那么我們就稱這兩個數同余
  • 逆元是同余的一種常見特殊情況
  • 對於求逆元,首先要知道逆元有什么用:
  • 逆元是在取模運算中可以用乘法代替除法的巧妙工具

code:

void ex_gcd(int a,int b,int &x,int &y)
{
	if (b==0){x=1,y=0;return;}
	ex_gcd(b,a%b,x,y);
	int tmp=x;
	x=y,y=tmp-a/b*y;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM