其他分享
首页 > 其他分享> > 初等数论漫谈/学习记录

初等数论漫谈/学习记录

作者:互联网

八个月前浅尝辄止地碰了一下初等数论,写了一大堆零零散散的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\) 的二元一次不定方程的通法:

逆元

22.11.12

解法一:费马小定理 \((m\in\mathbb{P})\)

解法二:欧拉定理

解法三:exgcd

线性求逆元

在 \(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)\) 时间内求解形如

\[\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} \]

\[\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{cases}\Longleftrightarrow 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\),

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

咕咕咕……

标签:gcd,数论,bmod,漫谈,varphi,times,pmod,初等,equiv
来源: https://www.cnblogs.com/vanspace/p/Naive-Number-Theory.html