初等数论漫谈/学习记录
作者:互联网
八个月前浅尝辄止地碰了一下初等数论,写了一大堆零零散散的blog,想了想最好还是把它们整理一下,顺便补充一点当时没学到/没写到的内容。
以下讨论对象均为整数。
exgcd
21.11.02
即扩展欧几里得,可以以普通欧几里得的复杂度求出关于 \(x,y\) 的不定方程 \(ax+by=\gcd(a,b)\) 的一组特解。
假设我们递归求出了 \(bx+(a\bmod b)y=\gcd(b,a\bmod b)\) 的一组解 \((x',y')\),则
\[bx'+(a\bmod b)y'=\gcd(b,a\bmod b) \]欧几里得告诉我们 \(\gcd(a,b)=\gcd(b,a\bmod b)\),所以
\[bx'+(a\bmod b)y'=\gcd(a,b) \]\[bx'+(a-b\times \lfloor\frac{a}{b}\rfloor)y'=\gcd(a,b) \]\[bx'+ay'-b\times \lfloor\frac{a}{b}\rfloor y'=\gcd(a,b) \]\[ay'+b\times (x'-\lfloor\frac{a}{b}\rfloor y')=\gcd(a,b) \]\((y',x'-\lfloor\frac{a}{b}\rfloor y')\) 即为所求。整个递归过程只需要在普通欧几里得算法的基础上稍加修改即可,边界为 \(b=0\) 时 \((x,y)=(1,0)\)。
struct pair{
int x,y;
};
pair exgcd(int a,int b){
if(!b) return (pair){1,0};
pair res=exgcd(b,a%b);
return (pair){res.y,res.x-a/b*res.y};
}
二元一次不定方程
22.11.23
解形如 \(ax+by=c\) 的二元一次不定方程的通法:
-
设 \(g=\gcd(a,b)\),原方程有整数解的充要条件为 \(g\;|\;c\)。
-
使用
exgcd
解出 \(ax'+by'=g\) 的整数解 \((x',y')\)。 -
原方程的一组特解即为 \((x_0,y_0)=(x'\times \dfrac{c}{g},y'\times \dfrac{c}{g})\),
-
通解为 \((x,y)=(x_0+k\times \frac{b}{g},y_0-k\times \frac{a}{g})\)。
逆元
22.11.12
-
对于 \(a,m\in\N^*\),称满足 \(a\times x\equiv 1\pmod m\) 即 \(x\equiv a^{-1}\pmod m\) 的 \(x\) 为 \(a\) 在膜 \(m\) 意义下的逆元。
-
逆元存在的充要条件:\(\gcd(a,m)=1\)。
解法一:费马小定理 \((m\in\mathbb{P})\)
-
费马小定理:对于 \(p\in\mathbb{P}\),有 \(a^{p-1}\equiv 1\pmod p\)。
-
由费马小定理有 \(a\times a^{p-2}\equiv 1\pmod p\),即 \(a^{p-2}\) 为 \(a\) 在膜 \(p\) 意义下的逆元。
-
实现:快速幂,\(O(\log p)\)。
解法二:欧拉定理
-
欧拉定理:对于 \(\gcd(a,m)=1\),有 \(a^{\varphi(m)}\equiv 1\pmod m\)。
-
由欧拉定理有 \(a\times a^{\varphi(m)-1}\equiv 1\pmod m\),即 \(a^{\varphi(m)-1}\) 为 \(a\) 在膜 \(m\) 意义下的逆元。
-
实现:\(O(\sqrt{m})\) 预处理 \(\varphi\),快速幂 \(O(\log \varphi(m))\)。
-
模数不统一时需要 \(O(模数值域)\) 预处理 \(\varphi\)。
解法三:exgcd
-
由逆元定义有 \(a\times x\equiv 1\pmod m\),即有不定方程 \(ax+my=1\),可使用 exgcd 求解。
-
解出的 \(x\) 即为 \(a\) 在膜 \(m\) 意义下的逆元。
-
实现:
exgcd
,均摊 \(O(1)\),最坏 \(O(\log m)\)。
线性求逆元
在 \(O(n)\) 时间内打出 \(1\to n\) 在膜 \(p\) 意义下的逆元,一般来说 \(p\) 为质数。
现在我们要求 \(k\) 在膜 \(p\) 意义下的逆元 \(inv_k\)。\(inv_1=1\),\(\forall k>1\):
设 \(a=\lfloor\frac{p}{k}\rfloor\),\(b=p\bmod k\),有 \(ak+b=p\)。
\(\because b\times inv_b\equiv 1\pmod p\),
\(\therefore (p-ak)\times inv_b\equiv 1\pmod p\),
\(\therefore p\times inv_b-ak\times inv_b\equiv 1\pmod p\),
\(\therefore -ak\times inv_b\equiv 1\pmod p\),
\(\therefore -ak\times inv_{p\bmod k}\equiv 1\pmod p\),
\(\therefore -\lfloor\frac{p}{k}\rfloor\times k\times inv_{p\bmod k}\equiv 1\pmod p\),
\(\therefore inv_k\equiv-\lfloor\frac{p}{k}\rfloor\times inv_{p\bmod k}\pmod p\)
\(\equiv (p-\lfloor\frac{p}{k}\rfloor)\times inv_{p\bmod k}\pmod p\)。
CRT+ex
21.11.21
即 China Remaining Theorem
,中国剩余定理,可以在 \(O(n)\) 时间内求解形如
\(\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\\\cdots\\x\equiv a_n\pmod {m_n}\\\forall i\ne j,\gcd(m_i,m_j)=1\end{cases}\)
的模数互质的同余方程组。
结论
设 \(S=\prod_{i=1}^n m_i\),
\(M_i=\dfrac{S}{m_i}\),
\(T_i\) 为 \(M_i\) 在模 \(m_i\) 意义下的逆元,即 \(M_i\times T_i\equiv 1\pmod {m_i}\)。
我们可以瞎 jb 构造出一个特解
\[x_0=\sum_{i=1}^n a_i\times M_i\times T_i \]通解即为 \(x=x_0+k\times M(k\in \mathbb{Z})\)。
证明
读者自证不难
由特解推通解的过程不用证了吧。。。
对于特解 \(x_0\) 正确性的证明:
我们设 \(f_i=a_i\times M_i\times T_i\)。
则 \(\forall i\),有
\[x_0=f_i+\sum_{j\ne i} f_j \]\(\forall j\ne i\),
\(\because m_i\;|\;M_j=\dfrac{S}{m_j}\),
\(\therefore m_i\;|\;f_j\),
\(\therefore f_j\equiv 0\pmod {m_i}\),
\(\therefore \forall i\),有
\[x_0\equiv f_i+\sum_{j\ne i}0\equiv f_i\pmod {m_i} \]进一步地,
\(\because M_i\times T_i\equiv 1\pmod {m_i}\),
\(\therefore f_i\equiv a_i\times 1\equiv a_i\pmod {m_i}\),
\(\therefore \forall i\),有
\[x_0\equiv a_i\pmod {m_i} \]证毕。
exCRT
21.11.22
exCRT
,即扩展中国剩余定理,是可以在 \(O(n)\) 时间内求解形如
的一次同余方程组的方法,对 \(m_i\) 间的关系没有特殊要求。
该方法与 CRT
的思路与实现没有任何关系,不需要 CRT
的前置知识。
思路
我们把这 \(n\) 个同余方程两两合并起来,即重复一下操作 \(n-1\) 次:
- 选择两个未被选过的同余方程,构成一个同余方程组
- 把这两个同余方程合并,即找到一组 \(a',m'\),使得
- 然后把原来的两个同余方程删去,把合并得到的同余方程 \(x\equiv a'\pmod {m'}\) 加入,其可以被选中参与之后的合并。
每次合并都会使同余方程组内的方程个数减少 \(1\) 个,因此最后只会剩下一个同余方程
\[x\equiv a\pmod m \]\(x=a\bmod m\) 即为原方程组的最小非负整数解。
合并过程
设我们正在合并一个同余方程组
\[\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{cases} \]很明显地,合并后的 \(m'=\operatorname{lcm}(m_1,m_2)\)。
我们设
\[x=k_1m_1+a_1=k_2m_2+a_2 \]有
\[k_1m_1-k_2m_2=a_2-a_1 \]这是一个简单的二元不定方程组,可以直接求解。
解出 \((k_1,k_2)\) 后,将其代回便能得到 \(x\bmod m'\) 的余数,完成合并。
代码实现有一定细节,故放出:
void merge(int i){
//把第i个同余方程和第i+1个合并
int k=ind_equation(m[i],m[i+1],a[i+1]-a[i]).x;
int d=lcm(m[i],m[i+1]);m[i+1]=d;
a[i+1]=((fmul(k,m[i],d)+a[i])%d+d)%d;//对 m' 取模
}
欧拉定理+ex
22.12.02
欧拉定理
结论
对于 \(\gcd(a,m)=1\),\(a^{\varphi(m)}\equiv 1\pmod m\)。
证明
设 \(x_{i,\cdots,\varphi(m)}\) 表示 \(< m\) 的正整数中所有与 \(m\) 互质的数, \(p_i=a\times x_i\),
\(\forall i\),\(\because \gcd(a,m)=\gcd(x_i,m)=1,\therefore \gcd(p_i=a\times x_i,m)=1\)。
\(\forall i\ne j\),
-
\(p_i-p_j\equiv a\times(x_i-x_j)\),
-
\(\because x_i-x_j\not\equiv 0\pmod m,\gcd(a,m)=1\),
-
\(\therefore p_i-p_j\not\equiv 0\pmod m\),
\(\therefore \forall i\ne j\),\(p_i\not\equiv p_j\pmod m\);
\(\because \forall i\),由欧几里得,\(\gcd(m,p_i\bmod m)=\gcd(p_i,m)=1\),
\(\therefore \forall i\),\(\gcd(p_i\bmod m,m)=1\)。
综上,有 \(p_i\bmod m\) 的值为 \(< m\) 的整数,两两不同 且 都与 \(m\) 互质,
即 \(p_{1,\cdots,\varphi(m)}\bmod m\) 与 \(x_{1,\cdots,\varphi(m)}\) 一一对应,
\[\therefore \prod_{i=1}^{\varphi(m)} p_i\equiv \prod_{i=1}^{\varphi(m)} x_i\pmod m \]\[\therefore (\prod_{i=1}^{\varphi(m)} a)\times (\prod_{i=1}^{\varphi(m)}x_i)\equiv \prod_{i=1}^{\varphi(m)} x_i\pmod m \]\[\therefore \prod_{i=1}^{\varphi(m)} a\equiv 1\pmod m \]\[\therefore a^{\varphi(m)}\equiv 1\pmod m \]扩展欧拉定理
结论
\[a^b\equiv\begin{cases}a^{b\bmod \varphi(m)}&\gcd(a,m)=1\\a^b&b<\varphi(m)\\a^{(b\bmod \varphi(m))+\varphi(m)}&b\ge\varphi(m)\end{cases} \]证明
case1:\(\gcd(a,m)=1\)
由普通欧拉定理有 \(a^{\varphi(m)}\equiv 1\pmod m\)。
设 \(b=k\times \varphi(m)+r\quad(k=\lfloor\frac{b}{\varphi(m)}\rfloor,r=b\bmod \varphi(m))\),
则 \(a^b\equiv a^{k\times \varphi(m)}\times a^r\equiv (a^{\varphi(m)})^k\times a^r\equiv 1^k\times a^r\equiv a^r\equiv a^{b\bmod \varphi(m)}\pmod m\)。
case2:\(b<\varphi(m)\)
略。
case3:\(b\ge \varphi(m)\)
对于任意质数 \(p\):
设 \(m=p^r\times s\),\(r\) 为 \(m\) 含质因子 \(p\) 的个数,即 \(\gcd(p,s)=\gcd(p^r,s)=1\)。
据普通欧拉定理,有 \(p^{\varphi(s)}\equiv 1\pmod s\),
又据欧拉函数性质,\(\varphi(m)=\varphi(s)\times \varphi(p^r)\),
\(\therefore p^{\varphi(m)}=p^{\varphi(s)\times \varphi(p^r)}=(p^{\varphi(s)})^{\varphi(p^r)}\equiv 1^{\varphi(p^r)}\equiv 1\pmod s\)。
设 \(p^{\varphi(m)}=k\times s+1\),
有 \(p^{\varphi(m)+r}=(k\times s+1)\times p^r\)
\(=k\times s\times p^r+p^r=k\times m+p^r\),
\(\therefore p^{\varphi(m)+r}\equiv p^r\pmod m\)。
\(\therefore \forall x\ge r\),
\(p^x\equiv p^{x-r}\times p^r\)
\(\equiv p^{x-r}\times p^{\varphi(m)+r}\)
\(\equiv p^{x+\varphi(m)}\pmod m\),
\(\therefore \forall x\ge r\),\(p^x\equiv p^{x+k\times \varphi(m)}\pmod m\quad(k\in\mathbb{N})\)。①
\(\because p^r\;|\;m\),\(\therefore \varphi(m)\ge \varphi(p^r)\),
同时有 \(\varphi(p^r)\ge r\)(这个东西可以感性理解)。
同时考虑到 \(b\ge \varphi(m)\),有
\[b\ge\varphi(m)\ge\varphi(p^r)\ge r \]设 \(b=k\times \varphi(m)+y\quad(k=\lfloor \frac{b}{\varphi(m)}\rfloor\ge 1,y=b \bmod \varphi(m))\),
有 \(b=\varphi(m)+(k-1)\times \varphi(m)+y\),
\(\because \varphi(m)+y\ge r\) 且 \(k-1\in\mathbb{N}\),\(\therefore\) 由 ① 有
\(p^b\equiv p^{\varphi(m)+y}\equiv p^{(b\bmod \varphi(m))+\varphi(m)}\pmod m\)。
设 \(a=\prod p_i\),\(p_i\) 为质数,有
\(a^b=\prod p_i^b\)
\(\equiv \prod p_i^{(b\bmod \varphi(m))+\varphi(m)}\)
\(\equiv (\prod p_i)^{(b\bmod \varphi(m))+\varphi(m)}\)
\(\equiv a^{(b\bmod \varphi(m))+\varphi(m)}\pmod m\)。
BSGS+ex
21.12.06
BSGS
BSGS
,全名 Baby-Step Giant-Step
,可以在 \(O(\sqrt{m})\) 时间内求
的正整数解。
思路
\(\because \gcd(a,m)=1,a^{\varphi(m)}\equiv 1\pmod m\),
\(\therefore\) 原方程在 \([0,\varphi(m)-1]\) 内有且仅有一个整数解 \(x_0\),
通解为 \(x_0+k\times \varphi(m)\quad(k\in\mathbb{N})\)。
所以我们只需以一种优雅的方式枚举 \(0\to m\) 的所有 \(x\),就必然能求出 \(x_0\),进而推出原方程的通解。
正如本算法的名字,我们设
\[\begin{cases}t=\lceil\sqrt{m}\;\rceil\\x=i\times t-j\quad(1\le i\le t,0\le j\le t-1,\{i,j\}\in \mathbb{Z})\end{cases} \]我们先特判 \(b\equiv 1\pmod m\):该情况下,显然有 \(x_0=0\)。
对于其他情况,我们枚举所有范围内的 \(i,j\),便能覆盖 \([1,m]\) 之间的所有 \(x\)。
我们有
\[a^{i\times t-j}\equiv b\pmod m \]两边同乘 \(a^j\),有
\[a^{i\times t}\equiv b\times a^j\pmod m \]注意,\(\gcd(a,m)=1\) 使得这两个式子等价。
我们可以枚举 \([0,t-1]\) 之间的 \(j\),用哈希表建立起 \((b\times a^j\bmod m)\to j\) 的关系,
然后枚举 \([1,t]\) 之间的 \(i\),判断哈希表中是否有 \(a^{i\times t}\to j\),
如果有,那么 \(i\times t-j\bmod \varphi(m)\) 即为所求的 \(x_0\)。
exBSGS
咕咕咕……
标签:gcd,数论,bmod,漫谈,varphi,times,pmod,初等,equiv 来源: https://www.cnblogs.com/vanspace/p/Naive-Number-Theory.html