Loading

初等数论漫谈/学习记录

八个月前浅尝辄止地碰了一下初等数论,写了一大堆零零散散的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 S(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)\) 时间内求解形如

\[\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\\\cdots\\x\equiv a_n\pmod {m_n}\end{cases} \]

的一次同余方程组的方法,对 \(m_i\) 间的关系没有特殊要求。

该方法与 CRT 的思路与实现没有任何关系,不需要 CRT 的前置知识。

思路

我们把这 \(n\) 个同余方程两两合并起来,即重复一下操作 \(n-1\) 次:

  • 选择两个未被选过的同余方程,构成一个同余方程组

\[\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{cases} \]

  • 把这两个同余方程合并,即找到一组 \(a',m'\),使得

\[\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{cases}\Longleftrightarrow x\equiv a'\pmod {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})\) 时间内求

\[a^x\equiv b\pmod m\qquad(\gcd(a,m)=1) \]

的正整数解。

思路

\(\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

咕咕咕……

posted @ 2022-07-20 13:51  Albertvαn  阅读(46)  评论(0编辑  收藏  举报