日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

同余方程笔记

發布時間:2025/3/21 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同余方程笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線性同余方程

定義
 形同 \(ax \equiv b\ (mod\ m)\),其中\(x\)是未知整數的同余式。
 
定理
 \(a,b \in Z\)\(m \in N^+\)\(gcd(a,m)=d\),若\(d|b\),則方程恰好有\(d\)個模\(m\)不同余的解,否則方程無解。
 
解法
 · 拓展歐幾里得
 
 由同余方程的定義式可得 \(ax+my=b\),這個方程就是二元一次不定方程。若方程有解,則對于轉化而來的方程 \(ax+my=b\),設 \(d=gcd(a,m)\),則 \(a=d*a_0\)\(m=d*m_0\)\(b=d*b_0\)
 
 方程轉化為 \(a_0x+m_0y=b_0\),且 \(gcd(a_0,m_0)=1\),可以利用拓展歐幾里得求出一可行解 \(x\)
 
 雖然 \(x\) 不唯一,但是屬于一個模 \(m\) 剩余系,由定理可知,共有 \(d\) 個模 \(m\) 剩余類滿足方程,由 \(a_0x \equiv b_0(mod\ m_0)\),其分別為
 

\(x,x+m_0,x+2m_0...\ x+(d?1)m_0\)
 
 其最小正整數解可表示為 \((x \mod m + m) \mod m\)
 
 · 另一種神奇的方法
 對于方程 \(a_0x \equiv b_0(mod\ m_0)\),由歐拉定理,\(x \equiv a_0^{\phi(m_0) - 1}b_0(mod\ m_0)\)。最終所有的解可以表示為 \(x \equiv a_0^{\phi(m_0) - 1}b_0 + km_0(mod\ m)\)
 
****

線性同余方程組

形式
 \(\left\{ \begin{array}{lcl} x \equiv a_1 (mod\ n_1 )\\ x \equiv a_2 (mod\ n_2 )\\ x \equiv a_3 (mod\ n_3 )\\   ....\\ x \equiv a_k (mod\ n_k ) \end{array} \right.\)
 
 給定\(A = {a_1, a_2, a_3 ... a_k}\)\(N = {n_1,n_2,n_3...n_k}\),求一個\(x\)

解法
· 當 \(\forall{gcd(n_i,n_j) = 1}\)
 
 中國剩余定理。
 
 首先求出 \(lcm(n_1,n_2,n_3...n_k)\),即 \(\Pi_{i = 1}^k n_i\),令 \(m_1= \frac{lcm}{n_1}\)\(m_2= \frac{lcm}{n_2}\)\(m_3= \frac{lcm}{n_3}\)\(...\)\(\ m_k= \frac{lcm}{n_k}\),然后構造出一個方程組:
 
 \(\left\{ \begin{array}{lcl} t_1m_1 \equiv 1 (mod\ n_1 )\\ t_2m_2 \equiv 1 (mod\ n_2 )\\ t_3m_3 \equiv 1 (mod\ n_3 )\\   ....\\ t_km_k \equiv 1 (mod\ n_k ) \end{array} \right.\)
 
 利用拓展歐幾里得可以求得 \(t_1,t_2,t_3...t_k\),最后
 

\(ans=(t_1m_1a_1 + t_2m_2a_2 + t_3m_3a_3 ...\ t_km_ka_k)\mod lcm\)

· 當 \(\exists{gcd(n_i,n_j) \ne 1}\)
 
 拓展中國剩余定理。
 
 先考慮只有兩個方程的情況:\(\left\{ \begin{array}{lcl} x \equiv a_1 (mod\ n_1 )\\ x \equiv a_2 (mod\ n_2 ) \end{array} \right.\)
 
 得到 \(\left\{ \begin{array}{lcl} x = a_1 + t_1n_1\\ x = a_2 + t_2n_2 \end{array} \right.\)
 
 可以合并為 \(t_1n_1 + a_1 = t_2n_2 + a_2\),因為 \(t_1,t_2 \in (-\infty,\infty)\),所以項的符號并不對過程及解造成影響,變形得到一個又可以用拓歐求解的二元一次不定方程 \(t_1n_1 + t_2n_2 = a_2 - a_1\)
 
 得到一個最小正整數解 \(x_1\),現在令 \(k = (n_1x_1 + b_1)\),構造一個方程 \(x \equiv k(mod\ lcm(a_1, a_2))\),與下一個方程繼續重復上述過程求解即可。
 
· 另一種神奇的方法
 
 同樣先僅考慮只有兩個方程的情況,設 \(y=x-a_1\),則
 \(\left\{ \begin{array}{lcl} y \equiv 0 (mod\ n_1)\\ y \equiv a_2-a_1 (mod\ n_2) \end{array} \right.\)
 
 \(g=gcd(n_1,n_2)\),若保證方程有解則 \(g|(a_2-a_1)\),設 \(a_0=\frac{a_2-a_1}{g}\)\(y_0=\frac{y}{g}\)\(n_1\ '=\frac{n_1}{g}\)\(n_2\ '=\frac{n_2}{g}\)
 \(\left\{ \begin{array}{lcl} y_0 \equiv 0 (mod\ n_1\ ')\\ y_0 \equiv a_0 (mod\ n_2\ ') \end{array} \right.\)
 
 得\(kn_1\ ' \equiv a_0(\ mod n_2\ ')\),由歐拉定理
 

\(k \equiv n_1^{\ \ '\phi(n_2\ ')-1}a_0(\ mod n_2\ ')\)
 
 現在將以上推算代回原方程:
 \(y_0 \equiv n_1^{\ \ '\phi(n_2\ ')}a_0\ (mod\ n_1n_2)\)
 \(x \equiv gy_0 + a_1\equiv g(n_1^{\ \ '\phi(n_2\ ')}a_0) + a_1\ (mod\ n_1n_2)\)
 
 至此,兩個同余方程合并成了一個同余方程。迭代若干次可得到原方程組的解。
 
****

第一類指數同余方程

 
形式
 形同 \(a^x \equiv b(mod\ p)\) 的方程。

解法
 · 當 \(gcd(a,p) = 1\)
 
 \(Baby-step-Giant-step(BSGS)\)法。
 
 首先存在一個結論:若 \(gcd(a,p)=1\),則有 \(a^{x \mod \phi(p)} \equiv a^x (mod\ p)\)
 
 證明如下,因為 \(gcd(a,p)=1\),根據歐拉定理 \(a^{\phi(p)}\equiv 1(mod\ p)\),因此顯然若 \(k \in N\),那么 \(a^{k \phi(p)}\equiv 1(mod\ p)\)
 
 設 \(t \in N\)\(t < \phi (p)\),所以 \(a^{k \phi(p) + t}\equiv a^t(mod\ p)\),故\(a^{x \mod \phi(p)} \equiv a^x (mod\ p)\)
 
 因此可以確定的是若方程有解,則在 \([0, \phi(p))\) 內一定有一個解。是的,這個結論在下面并沒什么用。
 
 \(BSGS\)算法實際上是利用了分塊思想來優化暴力枚舉,有很多形式不同但本質相同的構造方程的方法,這里可以令 \(m=\lfloor \sqrt{p} \rfloor\),設
 

\(x = im+j\ (i \in [0,m], j\in[0, m], i,j\in N)\)
 
 即 \(a^x=a^{im}a^j\)
 
 設 \(d = a^{im}\),則原方程轉化為 \(da^j=b(mod\ p)\),枚舉\(i\),拓歐求得 \(a^j\)。預處理出 \(a^i \mod p(i \in [0, m])\),就可以利用哈希表近似 \(O(1)\) 查詢 \(j\)
 
 · 當 \(gcd(a,p) \ne 1\)
 
 拓展\(BSGS\)
 
 \(g=gcd(a,p)\),原式為 \((a'g)^x \equiv b'g(mod\ c'g)\),即 \(a'(a'g)^{x-1} \equiv b'(mod\ c')\)
 
 對 \((a'g)^{x-1}\) 一項迭代求解,將每次產生的前面的 \(a'\) 乘起來作為 \(d\),直到 \(g=1\) 為止,此時產生一個方程
 \(da^{x-num} \equiv b(mod\ c)\)
 
 令 \(x=im+j+num\),枚舉求出 \(a^i(i \in [0,m+num])\),即轉化成與之前相同的問題。
 
****

第二類指數同余方程

形式
 形同 \(x^k \equiv b(mod\ p)\) 的方程。

解法
 · 當\(p\)是質數時
 
 表示成原根的若干次冪的形式后解線性方程。
 
 使 \(a^y \equiv x(mod\ p)\) 且為 \(p\) 的一個原根,通過第一類指數同余方程的解法求得 \(b \equiv a^m(mod\ p)\),則
 

\(a^{ky}\equiv a^m(mod\ p)\),得 \(a^{ky-m} \equiv 1(mod\ p)\)
 
 根據原根的性質,\(ky-m \equiv 0(mod\ (p-1))\),解線性同余方程得到 \(y\)\(x=a^y\mod p\)
 
 關于原根,即設 \(p\) 是質數,若 \(a^0,a^1,a^2...a^{p-2}\) 互不相等,則稱\(a\)\(p\)的一個原根。
 
 若廣義黎曼猜想成立,則 \(p\) 的最小正原根是 \(O(log^6 p)\) 級別的,通過枚舉法可以快速找到原根。
 
 關于原根的判斷與尋找,由于費馬小定理成立,因此方程 \(a^x \equiv 1(mod\ p)\) 的一個解是 \(x = p ? 1\),所以它的最小整數解 \(x_{min} |(p ? 1)\)。此時若 \(x_{min} =(p ? 1)\),則 \(a\)\(p\) 的原根。
 
 因此逐個嘗試\(p ? 1\)的約數即可。
 
 · 當\(p\)不是質數時
 
 設\(p=p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k}\),則此類方程與方程組
 \(x^k \equiv b(mod\ p_i^{a_i}),i \in [1,k]\) 等價。
 
 還不太會。
 
****
歡迎糾錯 ……

轉載于:https://www.cnblogs.com/nanjoqin/p/10190172.html

總結

以上是生活随笔為你收集整理的同余方程笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。