ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

初等数论漫谈/学习记录

2022-07-20 14:07:52  阅读:205  来源: 互联网

标签:gcd 数论 bmod 漫谈 varphi times pmod 初等 equiv


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

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

咕咕咕……

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有