亚色网站-亚色最新网址-亚州三级视频-亚州视频一区-成年网站在线看-成年网站在线在免费播放

深圳信息港

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

2023-08-21 17:19:16 來源:博客園

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

注意:這篇文章的信息量會有一點多,請耐心看完

一.同余1.1 同余的定義

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


(相關資料圖)

簡單來說,對于x,y,若x%p=y%p,即x,y對于p的余數相同,則稱為同余

1.2 同余的性質

本身不重要,但我們可惡的教練讓我們背下來

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

實在是不想碼出來()

二.求解乘法逆元2.1費馬小定理(很費馬)2.1.1費馬小定理簡介

假設a是一個整數,p是一個質數,則有以下定理

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

證明方法:出門左轉,百度(點擊有驚喜)歡迎您

2.1.2費馬小定理求解逆元

p為質數,則有\(a^{p-1}\)≡1(mod p)

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

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

2.2歐拉定理2.2.1歐拉定理簡介

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

φ(p)為歐拉函數,不清楚的請出門左轉見百度

2.2.2費馬小定理求解逆元

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

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

2.2.3代碼實現
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推理過程

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

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

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

k*a+r≡0 (mod p)

此時,兩邊同除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 作為邊界,開始遞推

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

說明了對任何整數a、b和它們的最大公約數d

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

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

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

由此,我們便可對式子進行化簡

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

2.4.2小知識-充要條件

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

樣例:

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

A是B的充分必要條件;

2 A=“某人觸犯了法律”;B=“應當依照刑法對他處以刑罰”。

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

3 A=“付了足夠的錢”;B=“買到商店里的東西”。

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

2.4.3擴展歐幾里德算法—求最小整數解推導

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

可由此推出

ax1+by1=ax2+by2

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

因為gcd(a,b)為a,b的最大公因數,所以將 A=a/gcd(a,b),B=b/gcd(a,b),向下推出

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

此時A,B互質,繼續向下推出

A(nB)=B(nA)

(x1-x2)=n*B

(y2-y1)=n*A

重點部分

這里從x入手,得

(x1-x2)=n*B

x1=x2+n*B

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

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

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

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

然后套入公式

B=b/gcd(a,b)

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

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

2.4.4擴展歐幾里德算法—代碼實現
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);//沒錯,這玩意能求gcd    //不過c++是有系統函數求GCD的->__gcd(a,b);y-=a/b*x;return gcd;  }
2.4.4擴展歐幾里德算法—應用場景

(1).求解不定方程

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

(3).求解模的逆元

2.4.5擴展歐幾里德算法—逆元求解
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不互質"<
三.例題3.1「NOIP2012」同余方程

思路:使用歐幾里德擴展進行求解->模板題

代碼如下

#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;  }

后續還會有數論的題解更新,敬請期待

關鍵詞:

熱門推薦

主站蜘蛛池模板: 波多野结衣视频在线看 | 亚洲高清国产一区二区三区 | 看全色黄大色大片免费久久久 | 播放一级特黄录像 | 国产综合色在线视频 | 日韩精品在线观看视频 | 男女一级做片a性视频 | 亚洲第一中文字幕 | 一级毛片免费视频观看 | 久久青草免费免费91线频观看 | 成人伊人 | 免费在线一级毛片 | 午夜影视网 | 国产精品久久久久久久人人看 | 天堂网在线播放 | 免费一级a毛片在线 | 扒开双腿爽爽爽视频www | 免费的三级网站 | 在线视频国产区11p 在线视频观看一区 | 国产乱人伦偷精品视频不卡 | 激情综合婷婷亚洲图片 | 日韩 欧美 综合 在线 制服 | 特级毛片s级全部免费 | 欧美黑人巨大3dvideo | 日本 国产 欧美 | 成年男女的免费视频网站 | 女bbbbxxxx毛片视频 | 国产精品久久免费视频 | 涩涩网页 | 99久久中文字幕伊人情人 | 五月开心久久 | 欧美曰韩一区二区三区 | 77se77亚洲欧美在线大屁股 | 成人激情视频在线 | 欧美不卡精品中文字幕日韩 | 伊人91| 国产亚洲欧美在线视频 | 免费视频精品一区二区 | 久久综合九色综合网站 | 免费国产成人高清在线观看麻豆 | 美女又美女又黄又免费网站 |