同余方程笔记

线性同余方程

定义
 形同 \(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]\) 等价。

 
 还不太会。
 


欢迎纠错 ……
posted @ 2018-12-28 13:58  南條雪绘  阅读(653)  评论(1编辑  收藏  举报