数论公式推导
数论公式推导
P.S.本文用于记录一些oi中数论公式和证明推导。
同余
裴蜀定理:\(\forall a,b\in \text{Z},\exists x,y\in \text{Z},\text{满足}ax+by=\gcd(a,b)\)。
考虑构造,对于求解\(\gcd(a,b)\)的过程中。
- \(b=0\)时,函数回溯,显然\(\gcd(a,b)=a\),方程变为\(ax+0\times y=a\),此时\(x=1,y=0\)为一个特解。
- \(b>0\)时,函数递归求解\(\gcd(b,a\bmod b)\),交换\(x,y\)得到一组特解满足\(by+a\bmod b\times x=\gcd(b,a\bmod b)=\gcd(a,b)\)
进一步推导:\((a-b\times\left\lfloor\frac{a}{b}\right\rfloor)\times x+by=\gcd(a,b)\)
令\({x}'=x,{y}'=y-\left\lfloor\frac{a}{b}\right\rfloor\times x\),带入发现\(ax+b\times(y-\left\lfloor\frac{a}{b}\right\rfloor\times x)=\gcd(a,b)\)
展开,得到\(ax+b\times y-b*\left\lfloor\frac{a}{b}\right\rfloor\times x=\gcd(a,b)\)
发现等价于\((a-b\times\left\lfloor\frac{a}{b}\right\rfloor)\times x+by=\gcd(a,b)\)。
于是我们可以通过递归找到原问题的一组特解,这个方法也被叫做exgcd。
1. 二元线性丢番图
二元线性丢番图形如\(ax+by=c\),可以在平面直角坐标系中表示。
用整数解等价于在直线上\(ax+by=c\)有整数点。
如果\(c=\gcd(x,y)\),我们可以直接用exgcd求解。
如果\(c \ne \gcd(x,y)\),可以将原式等号两边同时\(\times\frac{d}{c}\),记\(d=\gcd(x,y)\)。
原式变为\(ax'+by'=\gcd(x,y)\),其中\(\left\{\begin{matrix}x'=x\times\frac{d}{c}\\y'=y\times\frac{d}{c} \end{matrix}\right.\)
我们通过exgcd求出满足\(ax'+by'=\gcd(x,y)\)的一组特解,发现原二元线性丢番图的一组特解为\(\left\{\begin{matrix}x=x'\times\frac{c}{d}
\\y=y'\times\frac{c}{d}
\end{matrix}\right.\),当且仅当\(c|d\)时原方程有整数解。
找到特解我们还不满足,我们尝试用这组特解找到所有整数解。
发现每当\(x\)加上\(\frac{b}{d}\)时,等号左边加上\(\frac{ab}{d}\),为了保持等号的平衡,可以将\(y\)减去\(\frac{a}{d}\),等号左边减去\(\frac{ab}{d}\),正好抵消。
所以二元线性丢番图的所有整数解为:
2. 线性同余方程
线性同余方程形如$ax \equiv b \pmod{m} $,和二元线性丢番图,可以转换为用exgcd求解。
发现\(ax \equiv b \pmod{m} \iff ax=b+my\),移项,得到\(ax-my=b\)。
由于\(y\)是我们设的一个未知数,\(y\)的取值无关紧要,所以可以提一个符号到\(y\)的内部,变为\(ax+my=b\),变为求解二元线性丢番图。
求解出一组满足条件的特解\(x'\),由二元线性丢番图的知识,可以得到原线性同余方程的解为\(x=x'\times\frac{b}{gcd(a,m)}\),方程的通解为\(x=x'\times\frac{b}{gcd(a,m)}+k\times\frac{m}{\gcd(a,m)}\),所以原方程的通解可以记作所有\(\bmod \frac{m_1}{\gcd(a,m)}\)于\(x\)同余的数。
3. 线性同余方程组
线性同余方程组形如:
如果\(m\)两两互质,我们可以用中国剩余定理来解决(CRT)。
中国剩余定理:该方程组有整数解,解为\(x=\sum_{i=1}^na_iM_it_i\),其中\(M_i=\prod_{j=1,j\ne i}^nm_i\),\(t_i\)为\(M_it_i\equiv 1\pmod{m_i}\)。
发现对于\(x=\sum_{i=1}^na_iM_it_i\),带入第\(i\)项,有\(\sum_{j=1}^na_jM_jt_j\equiv a_i\pmod{m_i}\)。
将\(x\)拆为若干项的和,第\(i\)项为\(a_iM_it_i\)
显然,\(\forall j\in[1,n],j\ne i\)第\(j\)项中的\(M_j\)都有\(m_i\),说明第\(j\)项一定为\(m_i\)的倍数,在模\(m_i\)意义下答案为\(0\),所以,\(\sum_{j=1}^na_jM_jt_j\equiv a_i\pmod{m_i}\iff a_iM_it_i\equiv a_i\pmod{m_i}\)
显然,由\(M_i\)和\(t_i\)的定义可以得到,\(M_it_i\)模\(m_i\)意义为\(1\),右边的式子成立。
如果不保证\(m\)两两互质,我们无法用CRT得到一组特解,但是,我们仍然可以用合并方程式的方法递推出一组解,这种方法被称为exCRT。
扩展中国剩余定理:我们考虑简化条件,如果我们只有两个方程式,考虑怎么求解。
类比求解线性同余方程,将同余方程组改写成二元一次方程组的形式。
合并,得到\(a_1+k_1\times m_1=a_2+k_2\times m_2\)。
发现这很像一个二元线性丢番图的形式,我们开始移项,\(k_2\times m_2-k_1\times m_1=a_1-a_2\)
于是我们可以通过求解二元线性丢番图来求出\(k_1,k_2\)的一组特解,再回带求解出\(x\)的值。
方程有解当且仅当\((a_1-a_2)|\gcd(m1,m2)\)。
于是我们可以构造出一个同余方程,由线性同余方程的知识可知,对于第一个方程\(x\)的通解是\(\bmod m_1\)与\(x\)同余的数,对于第二个方程\(x\)的通解是\(\bmod m_2\)与\(x\)同余的数。
于是新方程可以写作:
\(x \equiv x' \pmod{\operatorname{lcm}(m_1,m_2)}\)记方程组的特解为\(x'\)。
于是我们完成了方程的合并,通过递推的方式,就可以求出原线性同余方程组的解。
4. 高次同余方程
求解形如\(a^x \equiv b \pmod{m}\)的高次同余方程。
我们可以用一种类似于根号分治的思想,这种做法被叫做大步小步算法BSGS。
BSGS算法:如果\(\gcd(a,m)=1\),我们将\(x\)拆为\(i\times t-j\),其中\(t=\left \lceil\sqrt m\right \rceil\)。
于是原式变为\(a^{i\times t-j} \equiv b \pmod{m}\),所以\(a^{i\times t} \equiv b\times a^j \pmod{m}\)
显然\(j\in[0,t-1]\),于是我们可以预处理出每个\(b\times a^j\),插入一个std::unordered_map中,在枚举每个\(a^{i\times t}\),在std::unordered_map中查找,时间复杂度为\(O(\sqrt m)\)。
exBSGS算法:如果\(\gcd(a,m)\ne 1\),我们令\(d=\gcd(a,m)\),让等式两边同时除以\(d\),消去因子,变为\(a^{x-1}\times \frac{a^{}}{d} \equiv \frac{b}{d} \pmod{\frac{m}{d}}\),假设执行了\(cnt\)次,每次除\(d\)的乘积为\(D\),转为求解\(a^{x-cnt}\times \frac{a^{cnt}}{D} \equiv \frac{b}{D} \pmod{\frac{m}{D}}\)。
此时\(a\)与\(\frac{m}{D}\)互质,设\(\frac{a^{cnt}}{D}\)的在模\(\frac{m}{d}\)的逆元为\(inv\),原式变为\(a^{x-cnt} \equiv \frac{b}{D}\times inv \pmod{\frac{m}{D}}\),可以使用BSGS求解。
5. 阶
定义:\(\gcd(a,m)=1\)满足\(a^n \equiv 1 \pmod{m}\)的最小正整数解\(n\),\(n\)叫做\(a\)在模\(m\)意义下的阶。记作\(\delta _m(a)\)或\(ord_m(a)\)。
性质1:\(a,a^2,\cdots,a^{\delta_m(a)}\)在模\(m\)的意义下两两不同余。
反证法:假设$\exists i,j\in [1,\delta_m(a)],\text{使得}a^i \equiv a^j \pmod{m} $。
不失一般性,设\(i<j\),那么有\(a^{j-i}\equiv 1\pmod m\),显然\(j-i<\delta_m(a)\),与阶的最小性矛盾,所以假设不成立。
性质2:若\(a^n \equiv 1 \pmod{m}\),则\(\delta_m(a)|n\)。
证明:将\(n\)拆分为\(n=\delta_m(a)q+r\)的形式,设\(r\in[0,\delta_m(a))\)。
原式变为\(a^{\delta_m(a)q+r} \equiv 1 \pmod{m}\)。
由于\(a^{\delta_m(a)}\equiv 1 \pmod m\),所以原式等于,\(a^{\delta_m(a)}\times a^r\equiv a^r \equiv 1 \pmod m\),因为\(r\in[0,\delta_m(a))\),所以\(r\)一定等于\(0\),否则与阶的最小性矛盾,所以\(n=\delta_m(a)q\),所以\(\delta_m(a)|n\)。
性质3:若\(a^p \equiv a^q \pmod{m}\),那么有$p \equiv q \pmod{\delta_m(a)} $。
证明:由性质2,我们有\(\delta_m(a)|p,\delta_m(a)|q\),所以\(p,q\)都是\(\delta_m(a)\)的整数倍。
所以\(p\equiv q\equiv 0 \pmod {\delta_m(a)}\)。
性质4:\(\delta_m(a)|\varphi(m)\)。P.S.这个性质可以帮助我们通过枚举\(\varphi(m)\)的因子来求出\(\delta_m(a)\)。
证明:由欧拉定理/费马小定理,有$a^{\varphi(m)} \equiv 1 \pmod{m} \(,由**性质2**,可以得到\)\delta_m(a)|\varphi(m)$。
通过这种方法求解阶的时间复杂度是\(O(\sqrt {\varphi(n)} \times log \varphi(n))\),近似\(O(\sqrt {n} \times logn)\),勉强能用。
阶的四则运算:
- \(\delta_m(a^k)=\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)。
证明:带入阶的定义式\(a^n \equiv 1 \pmod{m}\),得到\((a^{k})^{\delta_m(a^k)}\equiv 1\pmod m\)。
发现\(a^{k\delta_m(a^k)}\equiv 1\pmod m\)。所以,由性质2,有\(\delta_m(a)|k\delta_m(a^k)\)。
等式右边消去因子\(k\),左边如果有,通过\(\gcd(\delta_m(a),k)\)消掉,如果没有,那么无需消掉,\(\gcd(\delta_m(a),k)=1\)。
综上所述,\(\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}|\delta_m(a^k)\)。
另一方面,拆解\((a^{k})^{\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}}\),可以得到\((a^{\delta_m(a)})^{\frac{k}{\gcd(\delta_m(a),k)}}\)。
由阶的定义,可得\(a^{\delta_m(a)}\equiv 1 \pmod m\),所以\((a^{\delta_m(a)})^{\frac{k}{\gcd(\delta_m(a),k)}}\equiv 1 \pmod m\)。
由性质2,可得\(\delta_m(a^k)|\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\),所以\(\delta_m(a^k)=\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)。
- \(\delta_m(a)\delta_m(b)=\delta_m(ab)\)的充分必要条件为\(\gcd(\delta_m(a),\delta_m(b))=1\)。
证明:
必要性:P.S.已知\(\delta_m(ab)=\delta_m(a)\delta_m(b)\),推\(\gcd(\delta_m(a),\delta_m(b))=1\)。
带入阶的定义式,可得\(a^{\delta_m(a)}\equiv 1 \pmod m,b^{\delta_m(b)}\equiv 1 \pmod m\)。
所以\((ab)^{\operatorname{lcm}(\delta_m(a),\delta_m(b))}\equiv 1 \pmod m\),由性质2得,\(\delta_m(ab)|\operatorname{lcm}(\delta_m(a),\delta_m(b))\)。
由于我们已知\(\delta_m(ab)=\delta_m(a)\delta_m(b)\),所以\(\delta_m(a)\delta_m(b)|\operatorname{lcm}(\delta_m(a),\delta_m(b))\)。
所以\(\gcd(\delta_m(a),\delta_m(b))=1\)。
充分性:P.S.已知\(\gcd(\delta_m(a),\delta_m(b))=1\),推\(\delta_m(ab)=\delta_m(a)\delta_m(b)\)。
由阶的定义式,可得\((ab)^{\delta_m(ab)}\equiv 1 \pmod m\),所以\((ab)^{\delta_m(ab)\delta_m(b)}\equiv 1 \pmod m\),所以可以拆开\(ab\),消去\(b\),得到\(a^{\delta_m(ab)\delta_m(b)}\equiv 1 \pmod m\)。
所以\(\delta_m(a)|\delta_m(ab)\delta_m(b)\),因为\(\gcd(\delta_m(a),\delta_m(b))=1\),所以\(\delta_m(a)|\delta_m(ab)\)。
同理\(\delta_m(b)|\delta_m(ab)\),由\(\gcd(\delta_m(a),\delta_m(b))=1\),所以\(\delta_m(a)\delta_m(b)|\delta_m(ab)\)。
另一方面,\((ab)^{\delta_m(a)\delta_m(b)}\equiv (a^{\delta_m(a)})^{\delta_m(b)} \times (b^{\delta_m(b)})^{\delta_m(a)}\equiv 1\pmod m\)
所以\(\delta_m(ab)|\delta_m(a)\delta_m(b)\)。结合\(\delta_m(a)\delta_m(b)|\delta_m(ab)\),可得\(\delta_m(ab)=\delta_m(a)\delta_m(b)\)。
综上所述,可以证明\(\gcd(\delta_m(a),\delta_m(b))=1\)是\(\delta_m(a)\delta_m(b)=\delta_m(ab)\)的充分必要条件。
6. 原根
定义:回忆阶的性质4:\(\delta_m(a)|\varphi(m)\),我们定义当\(\delta_m(g)=\varphi(m)\)时,\(g\)为模\(m\)的原根。
原根是循环群的生成元,意思是当\(m\)为质数时,有\(g^i \pmod{m},0<i<m\)的结果各不相同,且每\(\varphi(m)\)一个循环。
证明:由于\(\delta_m(g)=\varphi(m)\),回顾阶的性质1:\(a,a^2,\cdots,a^{\delta_m(a)}\)在模\(m\)的意义下两两不同余。将\(a\)换成\(g\),可得\(g,g^2,\cdots,g^{\varphi(m)}\)在模\(m\)的意义下两两不同余。
推广:由于\(g^0=1\),所以\(g^{\varphi(m)}\equiv 1 \pmod{m}\)。
原根判定定理:若\(g,m\)互质,则\(g\)是模\(m\)的原根的充要条件是对于\(\varphi(m)\)的每个素因子\(p\),都有\(g^{\frac{\varphi(m)}{p}}\not\equiv 1 \pmod m\)。
反证法:假设\(g\)不为模\(m\)的原根,由阶的最小性,一定存在一个\(t<\varphi(m)\),使得\(g^t\equiv1\pmod m\)。
构造方程\(t\times x+\varphi(m)\times y=\gcd(t,\varphi(m))\)。
有前面得到的裴蜀定理,发现这是一定有解的。
所以一定有\(kt=x\varphi(m)+\gcd(t,\varphi(m))\)。
所以\(1\equiv 1^k\equiv g^{kt}\equiv g^{x\varphi(m)+\gcd(t,\varphi(m))}\equiv g^{x\varphi(m)}\times g^{\gcd(t,\varphi(m))}\pmod m\)
由欧拉定理/费马小定理,可得\(g^{\varphi(m)}\equiv 1 \pmod m\)。
进一步化简\(g^{x\varphi(m)}\times g^{\gcd(t,\varphi(m))}\equiv g^{\gcd(t,\varphi(m))}\equiv 1\pmod m\)。
所以\(\gcd(t,\varphi(m))|\varphi(m)\)且\(\gcd(t,\varphi(m))\le t<\varphi(m)\)。
所以存在\(\varphi(m)\)的质因子\(p\)使得\(\gcd(t,\varphi(m))|\frac{\varphi(m)}{p}\)。
所以有\(g^{\frac{\varphi(m)}{p}}\equiv g^{\gcd(t,\varphi(m))}\equiv1 \pmod m\),矛盾。
故假设不成立,原命题成立。
有了这个定理,我们就可以从小到大枚举\(g\),判断最小原根。
- 王元在 1959 年证明最小原根不大于\(m^{\frac{1}{4}}\),
由于oi只考实现不考证明,且该证明过于复杂,故舍弃。
求出了最小原根,可以通过构造求解出所有的原根。
对于\(\forall x \in \text{Z}\),有\(\gcd(x,\varphi(m))=1\),\(g^x\)都为\(m\)的原根。
证明:由原根的定义,有\(\delta_m(g)=\varphi(m)\),再由于阶的四则运算1:\(\delta_m(a^k)=\frac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)。
可得,\(\delta_m(g^x)=\frac{\delta_m(g)}{\gcd(x,\varphi(m))}\),由于\(\gcd(x,\varphi(m))=1\),所以\(\delta_m(g^x)=\delta_m(g)\)。
所以\(\delta_m(g^x)=\varphi(m)\),故\(g^x\)也为\(\varphi(m)\)的原根。
7. 离散对数
由于原根的性质:设\(g\)为模\(m\)的原根,\(g\)的幂可以取到模\(m\)的全部元素,且每\(\varphi(m)\)一个周期。
所以我们可以仿照对数的定义,设\(g^t\equiv a \pmod m\),则称\(a\)为在模\(m\)的意义下,以\(g\)为底的对数是\(t\),记作\(\text{Log}_ga\)。
因为\(g\)的次幂每\(\varphi(m)\)一个周期,所以\(t\in\text{Log}_ga=\{\text{Log}_ga+k\varphi(m)|k\in\text{Z}\}\)。
这被叫做离散对数。
和数学课本中的定义一样,有\(\text{Log}_g(a_1a_2)=\text{Log}_ga_1+\text{Log}_ga_2\)。
同时定义主值\(t\)为最小的\(\text{Log}_ga\),即\(t\equiv\text{Log}_ga\pmod{\varphi(m)}\)。
离散对数也符合换底公式\(\text{Log}*{g_1}{g_2}\equiv\frac{\text{Log}_{g_2}a}{\text{Log}_{g_1}a}\pmod{\varphi(m)}\)。
离散对数最大的用处就是求解另一类高次同余方程。
形如\(x^a \equiv b \pmod{m}\),\(m\)为质数。
方法一:
发现和上文提到的BSGS算法十分相似。
由于\(p\)为质数,所以一定有原根\(g\),因为\(g\)的次幂可以取便模\(m\)的数。
所以有\((g^c)^a \equiv b \pmod{m}\),交换指数\((g^a)^c \equiv b \pmod{m}\),使用BSGS求解即可。
所以,方程的一组特解\(x_0\equiv g^c\pmod m\)。
方法二:
同方法一,有\((g^a)^c \equiv b \pmod{m}\),取离散对数,设\(b\)在模\(m\)下离散对数的主值为\(t\)。
有\(ac\equiv t\pmod{\varphi(m)}\)。使用BSGS求解\(t\),变为线性同余方程,再用exgcd求解。
同上,方程的一组特解\(x_0\equiv g^c\pmod m\)。相比方法一,这个方法相当麻烦。
有了特解我们还不满足,尝试用这个特解构造出所有的解。
由于原根每\(\varphi(m)\)一个循环,所以\(g^{\varphi(m)}\equiv1\pmod{m}\)。
于是\(b\equiv g^{ac}\equiv x^a\equiv g^{ac+k\times\varphi(m)}\pmod m\)。
所以\(x\equiv g^{c+\frac{k\times \varphi(p)}{a}}\pmod m,a|k\times \varphi(m)\)。所以\(\frac{a}{\gcd(a,\varphi(m))}|k\)。
设\(k=\frac{a}{\gcd(a,\varphi(m))}\times i\),通解即为\(x\equiv g^{c+\frac{\varphi(p)}{\gcd(a,\varphi(m))}\times i}\pmod m\)。
如果\(a,p\)不互质,也可以用exGSGS求解。
8. 二次剩余/剩余
二次剩余:设\(a,m\)互质,若存在一个\(x\),使得\(x^2\equiv a\pmod m\)成立,称\(a\)为模\(m\)的二次剩余,这可以被认为是模意义下的开平方操作。
发现,这其实可以直接用上文提到的高次同余方程来求解,但是它有更好的性质和解法。
Euler 判别法:
若\(m\)为奇素数且\(a,m\)互质,有
所以\(a\)是\(m\)的二次剩余当且仅当\(a^{\frac{m-1}{2}}\equiv 1\pmod m\)。
证明:由欧拉定理/费马小定理,有\(a^{\varphi(m)}\equiv a^{m-1}\equiv1\pmod{m}\)。
所以\((a^{\frac{m-1}{2}}+1)(a^{\frac{m-1}{2}}-1)\equiv a^{m-1}+a^{\frac{m-1}{2}}-a^{\frac{m-1}{2}}-1\equiv1-1\equiv0 \pmod m\)。
所以\(a^{\frac{m-1}{2}}\equiv\pm1\pmod m\)。
由于\(m\)为奇素数,所以构造\(x^{p-1}-a^{\frac{m-1}{2}}=(x^2)^{\frac{m-1}{2}}-a^{\frac{m-1}{2}}\)。
我们有次方差公式:\(a^n-b^n=(a-b)(a^{n-1}+a^{n-2}b+a^{n-3}b^2+\cdots+a^2b^{n-3}+ab^{n-2}+b^{n-1})\)。
后面的结果是一个多项式,但与推导过程无关,设为\(A(x)\)。
所以\(x^{p-1}-a^{\frac{m-1}{2}}=(x^2)^{\frac{m-1}{2}}-a^{\frac{m-1}{2}}=(x^2-a)A(x)\)。
再构造\(x^m-x=x(x^{m-1}-a^{\frac{m-1}{2}})+x(a^{\frac{m-1}{2}}-1)=x(x^2-a)A(x)+x(a^{\frac{m-1}{2}}-1)\)。
所以当且仅当\(a^{\frac{m-1}{2}}\equiv1\pmod m\),\(a\)为\(m\)的二次剩余。
引入Legendre 符号(勒让德符号):
所以\(a^{\frac{m-1}{2}}\equiv(\frac{n}{m})\pmod m\)。
Cipolla 算法:
在\(x^2\equiv a\pmod m\)中找到\(r\)满足\(r^2-a\)为二次非剩余,令\(i^2\equiv r^2-a\pmod m\),则\((r+i)^{\frac{m+1}{2}}\)为方程的一个解,其相反数为另一个解。
证明:
像复数一样,定义式子中的\(i\)为虚数单位,\(i^2\equiv-1\pmod m\)。P.S.这里是形式化的描述,说法不严谨,在数论中模不会出现负数,但C++中会出现。
构造\((r+i)^{m+1}=(r+i)(r+i)^m\)。
用二项式定理展开发现中间的值都含\(m\),所以原式等于\((r+i)(r^m+i^m)\)。
由欧拉定理/费马小定律,所以\(r^m\equiv r\pmod m\),由\(i\)的定义\(i^2\equiv r^2-a\pmod m\)且\(m\)是奇素数,可得\(i^m= i^{m-1}\times i=(r^2-a)^{\frac{m-1}{2}}\times i=-i\)。
所以原式等于\((r+i)(r-i)=r^2-i^2=r^2-(r^2-a)=a\)。
所以\(\pm(r+i)^{\frac{m+1}{2}}\)为方程的两个根。
应为二次剩余的密度过大,大概是\(\frac{m}{2}\),每次随机一个数判断即可。
总结
大概目前就那么多,应该够用了,等学到新知识再回来填坑qwq。

浙公网安备 33010602011771号