中文字幕乱码视频22,亚洲香蕉午夜视频,黑人巨鞭大战洋妞视频,青青青青久久国产免

<b id="cho9o"></b>
          深圳信息港

          數(shù)論-同余與擴(kuò)展歐幾里得詳解(附例題及代碼)

          2023-08-21 17:19:16 來(lái)源:博客園

          數(shù)論-同余與擴(kuò)展歐幾里得詳解(附例題及代碼)

          注意:這篇文章的信息量會(huì)有一點(diǎn)多,請(qǐng)耐心看完

          一.同余1.1 同余的定義

          給定一個(gè)正整數(shù)m,如果兩個(gè)整數(shù)a和b滿足a-b能夠被m整除,即(a-b)/m得到一個(gè)整數(shù),那么就稱(chēng)整數(shù)a與b對(duì)模m同余,記作a≡b(mod m)


          (相關(guān)資料圖)

          簡(jiǎn)單來(lái)說(shuō),對(duì)于x,y,若x%p=y%p,即x,y對(duì)于p的余數(shù)相同,則稱(chēng)為同余

          1.2 同余的性質(zhì)

          本身不重要,但我們可惡的教練讓我們背下來(lái)

          于是擺爛…………………………

          實(shí)在是不想碼出來(lái)()

          二.求解乘法逆元2.1費(fèi)馬小定理(很費(fèi)馬)2.1.1費(fèi)馬小定理簡(jiǎn)介

          假設(shè)a是一個(gè)整數(shù),p是一個(gè)質(zhì)數(shù),則有以下定理

          \(a^{p-1}\)≡1(mod p)

          證明方法:出門(mén)左轉(zhuǎn),百度(點(diǎn)擊有驚喜)歡迎您

          2.1.2費(fèi)馬小定理求解逆元

          p為質(zhì)數(shù),則有\(zhòng)(a^{p-1}\)≡1(mod p)

          則不難推出:\(a^{p-2}\)*a≡1(mod p)

          所以,\(a^{p-2}\)就是a再在%p意義下的逆元

          2.2歐拉定理2.2.1歐拉定理簡(jiǎn)介

          \(a^{φ(p)}\)≡1(mod p)(即為費(fèi)馬小定理的一般形式)

          φ(p)為歐拉函數(shù),不清楚的請(qǐng)出門(mén)左轉(zhuǎn)見(jiàn)百度

          2.2.2費(fèi)馬小定理求解逆元

          推理:\(a^{φ(p)-1}\)*a≡1(mod p)

          所以\(a^{φ(p)-1}\)就是a在%p意義下的逆元

          2.2.3代碼實(shí)現(xiàn)
          long long ksm(long a,long p,long long mod){//快速冪 long long t=1,x=a%mod;while(p){if(p&1) t=t*x%mod;x=x*x%mod;p>>1;}return t;  }  long long getinv(long long a,long long mod){//inv一般表示逆元 return ksm(a,mod-2,mod);   }
          2.3遞推求解逆元(相信你十分了解遞推)2.3.1推理過(guò)程

          p為模數(shù),a為待求逆元(先設(shè)出來(lái)),所以\(a^{-1}\)是a在模p意義下的逆元

          p=k*a+r(k為常數(shù),r為p/a的余數(shù)->r

          則k=[p/a],r=p%a

          k*a+r≡0 (mod p)

          此時(shí),兩邊同除ar,得

          k*\(r^{-1}\)+\(a^{-1}\)≡0(mod p)

          \(a^{-1}\)≡-k*\(r^{-1}\)(mod p)

          inv(a)≡-[p/a]*inv(p%a) (mod p)

          以inv(1)==1 作為邊界,開(kāi)始遞推

          2.3.2代碼實(shí)現(xiàn)
          void getinv(long long mod){inv[1]=1;//邊界條件for(int i=2;i
          2.4擴(kuò)展歐幾里得算法求逆元2.4.1 前置知識(shí)-裴蜀定理(貝祖定理)

          說(shuō)明了對(duì)任何整數(shù)a、b和它們的最大公約數(shù)d

          關(guān)于未知數(shù)x和y的線性不定方程(稱(chēng)為裴蜀等式):若a,b是整數(shù),且gcd(a,b)=d,那么對(duì)于任意的整數(shù)x,y,ax+by都一定是d的倍數(shù)

          特別地,一定存在整數(shù)x,y,使ax+by=d成立

          它的一個(gè)重要推論是:a,b互質(zhì)的充分必要條件是存在整數(shù)x,y使ax+by=1.

          由此,我們便可對(duì)式子進(jìn)行化簡(jiǎn)

          將同余式ax≡c(mod b)轉(zhuǎn)化為ax+by=c(很重要,做題列方程化簡(jiǎn)幾乎必定會(huì)用到,牢記)

          2.4.2小知識(shí)-充要條件

          充分必要條件也即充要條件,意思是說(shuō),如果能從命題p推出命題q,而且也能從命題q推出命題p ,則稱(chēng)p是q的充分必要條件,且q也是p的充分必要條件。

          樣例:

          1 A=“三角形的三條邊都相等”;B=“三角形的三個(gè)角都相等”。

          A是B的充分必要條件;

          2 A=“某人觸犯了法律”;B=“應(yīng)當(dāng)依照刑法對(duì)他處以刑罰”。

          A是B的必要不充分條件;(A觸犯法律包含各種法,有刑法有民法;B已經(jīng)確定是刑法。B屬于A所以A是B的必要不充分條件)

          3 A=“付了足夠的錢(qián)”;B=“買(mǎi)到商店里的東西”。

          A是B的必要不充分條件;( A付夠了錢(qián) 可以買(mǎi)的是車(chē)、房子等;但是B能買(mǎi)到商店里的東西一定是要付夠錢(qián))

          2.4.3擴(kuò)展歐幾里德算法—求最小整數(shù)解推導(dǎo)

          ax1+by1=gcd(a,b)   ax2+by2=gcd(a,b)

          可由此推出

          ax1+by1=ax2+by2

          a(x1-x2)=b(y2-y1)

          因?yàn)間cd(a,b)為a,b的最大公因數(shù),所以將 A=a/gcd(a,b),B=b/gcd(a,b),向下推出

          A(x1-x2)=B(y2-y1)

          此時(shí)A,B互質(zhì),繼續(xù)向下推出

          A(nB)=B(nA)

          (x1-x2)=n*B

          (y2-y1)=n*A

          重點(diǎn)部分

          這里從x入手,得

          (x1-x2)=n*B

          x1=x2+n*B

          由此,我們推出了x解的通解公式 x=x0+n*B

          同理,我們推出了y解的通解公式 y=y0-m*A

          如果要求x的最小整數(shù)解,即x0,就為x0=x%B

          如果我們要求的是 ax+by=c,還得先轉(zhuǎn)化 x=x*c/gcd(a,b).

          然后套入公式

          B=b/gcd(a,b)

          x0=x%(b/gcd(a,b))

          證畢(博主已累成狗,點(diǎn)個(gè)推薦唄) 若還不清楚,可移步Ta的博客(講的蠻詳細(xì)的)

          2.4.4擴(kuò)展歐幾里德算法—代碼實(shí)現(xiàn)
          int exgcd(int a,int b,int &x,int &y){if(b==0){x=1,y=1;return a;}int gcd=exgcd(b,a%b,y,x);//沒(méi)錯(cuò),這玩意能求gcd    //不過(guò)c++是有系統(tǒng)函數(shù)求GCD的->__gcd(a,b);y-=a/b*x;return gcd;  }
          2.4.4擴(kuò)展歐幾里德算法—應(yīng)用場(chǎng)景

          (1).求解不定方程

          (2).求解線性不定方程(線性同余方程)

          (3).求解模的逆元

          2.4.5擴(kuò)展歐幾里德算法—逆元求解
          int exgcd(int a,int b,int &x,int &y){if(b==0){x=1,y=1;return a;}int gcd=exgcd(b,a%b,y,x);y-=a/b*x;return gcd;  }  int getinv(int a,int p){int x,y,gcd;gcd=exgcd(a,p,x,y);if(gcd==1){x=(x%p+p)%p;return x;}else{cout<<"a,p不互質(zhì)"<
          三.例題3.1「NOIP2012」同余方程

          思路:使用歐幾里德擴(kuò)展進(jìn)行求解->模板題

          代碼如下

          #include  #define int long long  using namespace std;  int x=0,y=0;  int exgcd(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}int g=exgcd(b,a%b,y,x);y-=a/b*x;return g;  }  signed main(){int a,b;cin>>a>>b;exgcd(a,b,x,y);cout<<(x%b+b)%b;return 0;  }

          后續(xù)還會(huì)有數(shù)論的題解更新,敬請(qǐng)期待

          關(guān)鍵詞:

          熱門(mén)推薦