初等数论

· · 算法·理论

前言

以下的资料和证明来自《算法竞赛进阶指南》和《信息学奥林匹克大纲》、OI-Wiki~以及~CSDN~和博客园~(作者标在前面),也有笔者手推得到的。如果你在阅读时遇到没弄懂的公式或者证明,不妨将有关的知识点连在一起,试着得出结论。若有不足之处,欢迎指出,请将您的意见私信给笔者

整除~\mid ~& 不整除~\nmid

~a,b~两数,a是不为0(a\ne 0)的整数,b~是整数。

整除的性质:

最大公约数(GCD)

定义

## 性质 + $\gcd(a,b)=\gcd(b,a)

证毕 \ 解释说明: \

$A:$因为$~a,b~$互质,$k~$作为$~a~$的因子怎么会和~b~的因子有交集呢。 \ $Q:$还是在第三个证明,$\gcd(k,b)=1~$又怎么会有$~k\mid c$? \ $A:$因为$~k~$是$~bc~$的因子,那$~k~$和$~b~$互质只能整除$~c~$了。 更多有关gcd的知识见[数论基础 OI-Wiki ](https://oi-wiki.org/math/number-theory/basic/#%E6%9C%80%E5%A4%A7%E5%85%AC%E7%BA%A6%E6%95%B0%E4%B8%8E%E6%9C%80%E5%B0%8F%E5%85%AC%E5%80%8D%E6%95%B0) # 同余号 $\equiv

~a,b~两数,a~与~b~~m~的余数相同,则a~~b~~m~(m \ne0)同余,记为~a\equiv b\pmod m

性质

其他性质详见数论基础 OI-Wiki

由此推出\

$\therefore a-b\equiv 0\pmod m $\ $\therefore m\mid (a-b)$\ $设~k=\Large\frac{a-b}{m}$\ $\therefore a-b=m\cdot k$\ 注:$m\mid (a-b)~$指$~m~$是$~(a-b)~$的因子,$(a-b)~$是$~m~$的倍数。 \ 再注:因为$~a-b \equiv 0\pmod m ~$,所以有$~(a-b) \bmod m=0$,能被取模为$~0~$肯定是倍数了 ### 例子 当$~a=22,b=7,m=3~$时\ $22 \equiv7\pmod m $\ $22-7\equiv 0\pmod m $\ $k=\Large\frac{22-7}{3}$ $=5$\ $22-7=3\times 5

整数唯一分解定理

定义

唯一分解定理又名算术基本定理,对于任何大于~1~的整数~n~,如果~n~是质数,那么~n~分解等于本身,如果~n~不是质数,则可以分解为~2~个或~2~个以上的质数的乘积,并且分解方式唯一。

分解方式

$n = p_1^{a_1}\cdot p_2^{a_2}\cdot p_3^{a_3}\cdot ... \cdot p_m^{a_m} $\ 注:$p_i~$是质数,$a_i~$是指数 ### 例子 $2=2^1$ \ $6=2^1\times 3^1$ \ $120=2^3\times 3^1\times 5^1$ \ $2700=2^2\times 3^3\times 5^2

欧拉函数

定义

$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\varphi(n)=|\text{\textbraceleft}i|1\le i \le n , \gcd(i,n)=1\text{\textbraceright}|

规律

例如:~~ \varphi(1)=1

$~~~~~~~~~~~ \varphi(3)=2 $~~~~~~~~~~~ \varphi(5)=4 $~~~~~~~~~~~ \varphi(7)=6 $~~~~~~~~~~~ \varphi(9)=6 $~~~~~~~~~~~ \varphi(11)=10 $~~~~~~~~~~~ \varphi(13)=12 $~~~~~~~~~~~ \varphi(15)=8 $~~~~~~~~~~~ \varphi(17)=16 $~~~~~~~~~~~ \varphi(19)=18 ~~~~~~~~~~~ \varphi(20)=8

通过观察以上数据,我们容易发现:

~~1.当~i~是个质数时: ~~2.~i~不是质数时:

证明

~i~是个质数时

~i~不是质数时

计算方式

用整数唯一分解定理分解~n\ 得到:n = p_1^{a_1}\cdot p_2^{a_2}\cdot p_3^{a_3}\cdot ... \cdot p_m^{a_m}

\varphi(n)=n~ \cdot $ $\Large\frac{p_1-1}{p_1}$ $ \cdot $ $\Large\frac{p_2-1}{p_2}$ $ \cdot $ $\Large\frac{p_3-1}{p_3} $ $ \cdot ...\cdot $ $\Large\frac{p_m-1}{p_m}

化简一下就是:

\varphi(n)=\LARGE n\prod_{i=1}^{m} \frac{p_i-1}{p_i} ~

例子

~n=10时\

则$~\varphi(10)=10\times ((2-1)/2)\times ((5-1)/5)=4

欧拉定理

定义

对于任意整数~a~和正整数~m,如果~a~~m~互质,即~\gcd(a,m)=1,则~a^{\varphi(m)}\equiv 1\pmod m 。 \ 比如~3~~8~\gcd(3,8)=13^{ \varphi(8)}=3^4=8181 \bmod 8=1。

推论

a^b\equiv a^{b\bmod \varphi(m)}\pmod m ~~~~~~~~~~~\gcd(a,m)=1

证明

~k= \Large\left\lfloor\frac{b}{\varphi(m)}\right\rfloor\normalsize,r=b\bmod~\varphi(m)

\therefore b=k\cdot \varphi(m)+r \therefore a^b=a^{k\cdot \varphi(m)+r}=(a^{ \varphi(m)})^k~\cdot ~a^{r}

根据欧拉定理得,当~ \gcd(a,m)=1时,~a^{\varphi(m)}\equiv 1\pmod m

\therefore a^b\equiv 1^k\cdot a^r \equiv a^r \pmod m \because r=b \bmod \varphi(m) 证毕 \ 解释说明:\ $Q:a^b\equiv 1^k\cdot a^r \equiv a^r \pmod m ~$这里怎么直接同余了$~?$ \ $A:$因为$~a^b=a^{k\cdot \varphi(m)+r}=(a^{ \varphi(m)})^k~ \cdot~a^{r}$,都相等了肯定同余嘛。 # 费马小定理 欧拉定理的一种特殊形式。 ## 定义 对于正整数$~a~$和质数$~p~$,若$~ \gcd(a,p)=1$,则$~a^{p-1} \equiv1\pmod p $\ 换个形式:$a^p \equiv a\pmod p

转换形式过程

$=a^p \div a^1 \equiv 1\pmod p $\ $=a^p \equiv 1\cdot a\pmod p $\ 证明请见[欧拉定理 & 费马小定理 OI-Wiki](https://oi-wiki.org/math/number-theory/fermat/#%E8%B4%B9%E9%A9%AC%E5%B0%8F%E5%AE%9A%E7%90%86) ## 求解乘法逆元 建议先去阅读**逆元**篇,此处求解的逆元不一定会小于模数,但一定是逆元\ $\because a^{p-1}\equiv 1\pmod p$\ $又\because a\cdot a^{-1}\equiv 1\pmod p$\ $\therefore a^{p-1}\equiv a\cdot a^{-1} \pmod p$\ $\therefore a^{p-2}\equiv a^{-1} \pmod p

扩展欧拉定理

伟大的欧拉觉得欧拉定理太慢,于是扩展欧拉定理诞生了~!

定义

&a^{b \bmod \varphi(m)},~~~~~~~~~~~~~~~\gcd(a,m)=1 \\ &a^b,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\gcd(a,m)\ne1,b<\varphi(m) \\ &a^{(b\bmod \varphi(m))+\varphi(m)},~~~~\gcd(a,m)\ne 1,b\ge \varphi(m) \\ \end{cases}~~~~\Large \pmod m $ \ 证明详见[博客——樱花赞](https://www.cnblogs.com/1024th/p/11349355.html)和[欧拉定理 & 费马小定理 OI-Wiki](https://oi-wiki.org/math/number-theory/fermat/#%E6%89%A9%E5%B1%95%E6%AC%A7%E6%8B%89%E5%AE%9A%E7%90%86)\ 例如$ ~~ a=4,b=12,m=10: $\ $ ~~ a^b \bmod m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \Rarr ~~~~~ 4^{12}\bmod 10=6$ \ $~~ a^{(b\bmod \varphi(m))+\varphi(m)}\bmod m~~~~~ \Rarr~~~~~ 4^{(12 \bmod \varphi(10))+\varphi(10)}\bmod 10=6

欧几里得算法

定义

欧几里得算法又称辗转相除法,通常用于求两个数的最大公约数(GCD)。\

解释:对于任意$ ~ a,b ~ $非负整数,$b\ne0$,则$\gcd(a,b)=\gcd(b,a\bmod b)

证明

证毕

裴蜀定理

介绍

裴蜀定理又称贝祖定理,是数论中的重要定理、一个关于最大公约数的定理,可用于求解不定方程~ax+by=c~是否有解。

定义

对于整数 ~a,b(a,b不全为0)~ ,对于整数~m~和任意整数~x,y,方程 ~ax+by=m~ 有解需满足~m~~ \gcd(a,b)~的倍数~(\gcd(a,b)\mid m),并且在上文 ~x,y~中存在一组 ~x_0,y_0~ 满足 ~ ax_0+by_0= \gcd(a,b)~,特别的,若~ax+by=1~有解需满足~\gcd(a,b)=1

证明

证毕\ 解释说明:\

$A:a_0=\Large\frac{a}{d}\normalsize,b_0=\Large\frac{b}{d}\normalsize

推广

假设有~n~个整数~a_1,a_2,a_3,...,a_n~。其中,d~是它们的最大公约数,则存在整数~x_1,x_2,x_3,...,x_n~来满足~a_1x_1+a_2x_2+a_3x_3+...+a_nx_n=d\ 既然裴蜀定理都有特殊情况,那推广一定也有:\ 当~ \gcd(a_1,a_2,a_3,...,a_n)=1~时,则存在整数~x_1,x_2,x_3,...,x_n~来满足~a_1x_1+a_2x_2+a_3x_3+...+a_nx_n=1

例子

三个整数~114,514,1919810,它们的~\gcd(114,514,1919810)~=2,有一组解~x_1=-9,x_2=2,x_3=0~满足~114\times -9+514\times 2+1919810\times 0=2~ \ 四个整数~114,514,1919,810~它们的~ \gcd(114,514,1919,810)~=1,有一组解~x_1=?,x_2=?,x_3=?,x_4=?~满足~114\times ?+514\times ?+1919\times ?+810\times ?=1~聪明的homo一定能得出答案(我懒)

模运算意义下的逆元

定义

一个整数~a~在模~m~的意义下的逆元是指~a^{-1}~满足~a\cdot a^{-1}\equiv 1\pmod m 。例如一个线性同余方程~a \cdot b \equiv 1\pmod m ,此时称~b~~a \bmod m~的逆元,记作a^{-1}。通常在求逆元时限制~0\le b<m~,这样的限制使得逆元具有唯一性和确定性

性质

证毕 \ 解释说明:\

$A:a=kd,m=k^{'}d,kd~$和$~k^{'}d~$可以被$~d$整除,所以$d\mid d(ka^{-1}-kp)$。 # 扩展欧几里得算法 ## 定义 咱们看名字就能看出来,这个东西是欧几里得算法的扩展,它比欧几里得算法强在欧几里得算法只能求出两个数之间的最大公约数$~( \gcd)$,而扩展欧几里得算法不仅能求出$~( \gcd)$,还能求出一组$~x,y~$来满足$~ax+by= \gcd(a,b)~$。看到这里,你是不是想起了某个定理?没错,扩展欧几里得算法是实现裴蜀定理的具体手段,而裴蜀定理为扩展欧几里得算法的应用提供了理论基础和依据。 ## 原理 在看扩展欧几里得算法原理之前,我们先回头看欧几里得算法: > 欧几里得算法又称辗转相除法,通常用于求两个数的最大公约数$(GCD)$。 欧几里得算法的原理是: > 对于任意$ ~ a,b ~ $非负整数,$b\ne0$,则$\gcd(a,b)=\gcd(b,a\bmod b)

而扩展欧几里得算法则是在这个求~( \gcd)~的过程中,同时求一组~x,y~来满足~ax+by= \gcd(a,b)~

算法步骤(过程)

让我们利用裴蜀定理欧几里得算法先对~ax+by= \gcd(a,b)~进行分解

据**欧几里得算法**可得\ $~~\gcd(a,b)=\gcd(b,a \bmod b)~$ \ $\therefore ax+by=\gcd(b,a \bmod b)$ \ 根据**裴蜀定理**可得\ $~~\gcd(b,a \bmod b)=bx_0+(a\bmod b)y_0$ \ $\therefore ax+by=bx_0+(a\bmod b)y_0$\ 再次根据**欧几里得算法**可得\ $~~\gcd(b,a \bmod b)=\gcd(a \bmod b,b\bmod (a\bmod b))~$ \ 看着很绕$?$那就设$~r=a\bmod b$\ 以上的公式就变成了$~\gcd(b,r)=\gcd(r,b\bmod r)$ \ 根据**裴蜀定理**可得\ $~\gcd(r,b\bmod r)=rx_1+(b\bmod r)y_1$\ 发现没有,这时候开始循环了,我们只需要不停循环,就会得到$~b=0~$\ $~ \gcd(a_?,0)=a_?~$,所以就有$~a_?x_?+b_?y_?=a_?~$ \ 因此我们很容易得出一组解$x_?=1,y_?=0~$来满足$~a_?\cdot 1+b_?\cdot 0=a_?~$ \ 公式转换结束 现在$~ax+by= \gcd(a,b)~$已经被**转换**了,并且我们已经得到了$~\gcd(a,b)~$为何值 \ 还剩下最后一个问题,$x,y~$这组解该怎么得出来,这就需要我们来进行转移了 \ 回到第一次公式转换,并且设$~d=\Large\left\lfloor\frac{a}{b} \right\rfloor~~ \normalsize,~~ r=a\bmod b~=a-bd$ \ $ax+by=bx_0+(a\bmod b)y_0~~\Rightarrow ~~ax+by=bx_0+ry_0$\ 接下来对$~bx_0+ry_0~$进行一个小小的转换 \ $\begin{aligned}bx_0+ry_0 &=bx_0+(a-bd)y_0 \\ &=bx_0+ay_0-bdy_0 \\ &=ay_0+bx_0-bdy_0 \\ &=ay_0+b(x_0-dy_0) \\ \end{aligned}$\ 所以$~ax+by=ay_0+b(x_0-dy_0)$\ 对比系数,得出$~x=y_0,y=(x_0-dy_0)~$\ 转移结束 所以我们只需要通过递归,就可以得到$~x,y~$一组解,代码如下 ```cpp #include <bits/stdc++.h> #define int long long using namespace std; int n, m, a, b, x, y, x_0, y_0; // 使用引用修改外部的 x 和 y 值 void exgcd(int a, int b, int& x, int& y) { if (b == 0) { x = 1; y = 0; return; } exgcd(b, a % b, x, y); int d = a / b; x_0 = y; y_0 = x - d * y; x = x_0; y = y_0; } signed main() { cin >> a >> b; exgcd(a, b, x, y); cout << x_0 <<' '<< y_0 << endl; } `````` ## 应用 ### 求解不定方程$~ax+by=c

解法

不定方程~ax+by=c,若有解需满足条件~ \gcd(a,b)\mid c~,设~k=\Large\frac{c}{\gcd(a,b)}~于是方程就变成了~ax+by=k\cdot\gcd(a,b)~,我们可以先找一对满足~ax+by=\gcd(a,b)~~x_0,y_0~,求得解后在方程两边同时乘一个~k(等同于乘上\Large\frac{c}{\gcd(a,b)}~),得到x_0k,y_0k这就是不定方程~ax+by=c~的一组解

不定方程~ax+by=c~的通解(通解:在一个方程或方程组中,能够表示出所有可能解的表达式。)可以表示为如下表达式\ 其中~x_0,y_0~为一组特解,d=\gcd(a,b)C~为任意整数 \ 通解:\begin{cases} x=\Large\frac{c}{d}\normalsize x_0+\Large\frac{b}{d}\normalsize C \\ \\ y=\Large\frac{c}{d}\normalsize y_0-\Large\frac{a}{d}\normalsize C \\ \end{cases} \ 注意:通解的~C~是同一个数

例子

有不定方程3x+5y=18,求出\gcd(3,5)=1,先求出3x+5y=1(别忘了这里是~ \gcd),得出x=2,y=-1\ 此时~k=18,因此原方程的解为x=36,y=-18。\ 通解为x=18\times 2+5C=36+5C\

y=18\times -1-3C=-18-3C

求解线性同余方程

解法

有同余式~ax \equiv b\pmod m ~,因为它只有一个未知数,又名线性同余方程~or~一次同余方程 \ 根据同余式的性质,我们可以设~k= \Large\frac{ax-b}{m}~k~没必要计算),方程转换一下就是~ax-b=km~\ 想想~ax+by=c~这个不定方程,我们是不是可以将~ax-b=km~转换为前面的不定方程来求解 \ 所以这里设~k=-y,方程变为~ax-b=-ym~,再次变换~ax+ym=b~ \ 这时线性同余方程变成了一个不定方程,若~gcd(a,m)\mid b~,方程有解

例子

~3x\equiv 5\pmod 7,根据方法,方程变为~3x+7y=5,因为~gcd(3,7)\nmid 5~,无解

求解乘法逆元

乘法逆元定义

想什么呢,它就是上面的模运算意义下的逆元

解法

乘法逆元,aa^{-1}\equiv 1\pmod m ,有解需满足~\gcd (a,m)=1\

# 威尔逊定理 ## 定义 当$~p~$为质数时,有$(p-1)!\equiv -1\pmod p

证明

综上所述,当~p~是质数时才会有(p-1)!\equiv -1\pmod p,定理成立\ 证毕

例子

下面放一个式子你谷题目\

这个式子应该很多人都见过吧,它在一定程度上体现了威尔逊定理的运用,下面来对这个式子进行分解(指对$OI-Wiki$思路进行讲解) + 当$~3k+7~$是质数时\ $~ &\equiv -1~(\bmod~3k+7) \\ &=3k+6 \\ \end{aligned}$\ 在两边同时加上一个$~1$,得 \ $~ $~

~(3k+6)!+1=m(3k+7)\

~

则有~m= \Large\frac{(3k+6)!+1}{3k+7}\

~ &=\left \lfloor\frac{(3k+6)!+1}{3k+7}-\left\lfloor\frac{(3k+6)!+1}{3k+7}-\frac{1}{3k+7}\right \rfloor\right \rfloor\\ &=\left \lfloor m-\left\lfloor m-\frac{1}{3k+7}\right \rfloor\right \rfloor\\ &=1 \end{aligned}$\ 为什么这里得$~1~$了,因为$~ \Large\frac{1}{3k+7}~$一定是个小于$~1~$的浮点数,向下取整只取整数位,所以$~m- \Large\frac{1}{3k+7}~$就相当于$~m-1~$了 + 当$~3k+7~$不是质数时\ $~

~3k+7\mid (3k+6)!~ \

~

因为~3k+7~不是质数了,所以有了除~1,3k+7~以外的约数,而这些约数它们一定在~1 < 约数 <3k+7~中 \

~

~(3k+6)!=m(3k+7)\

~

则有~m=\Large\frac{(3k+6)!}{3k+7} \

~ &=\left \lfloor \frac{(3k+6)!}{3k+7}+\frac{1}{3k+7} -\left \lfloor \frac{(3k+6)!}{3k+7} \right \rfloor \right \rfloor \\ &=m+\frac{1}{3k+7}-m\\ &=0 \end{aligned}$\ $~

这里得~0~的原因显而易见了,因为~ \Large\frac{1}{3k+7}~在向下取整后会得到~0~

综上所述,\Large\sum_{k=1}^{n} \left \lfloor\frac{(3k+6)!+1}{3k+7}-\left\lfloor\frac{(3k+6)!}{3k+7}\right \rfloor\right \rfloor~等同于求\Large\sum_{k=1}^{n}\normalsize [3k+7 为质数]

卢卡斯定理

中国剩余定理(CRT)

引入

今有物不知其数量,三三数之余二;五五数之余三;七七数之余二。问物几何?   ——《孙子算经》

这是一道典型的中国剩余定理例题

定义

中国剩余定理一般用于求在已知同余方程组中能满足方程组的最小整数解\ 假设有一组同余方程如下\

x \equiv a_1~( \bmod~p_1)\\ x \equiv a_2~( \bmod~p_2)\\ .~~ . ~~.\\ x \equiv a_n~( \bmod~p_n)\ \end{cases}$ \ 中国剩余定理则是用于求$~x~$的值\ 若方程有解,需满足模数两两互质(两两互质:指在一组数中,任意两个数互质) ## 算法步骤(过程) 还是同余方程组\ $\begin{cases} x \equiv a_1~( \bmod~p_1)\\ x \equiv a_2~( \bmod~p_2)\\ x \equiv a_3~( \bmod~p_3)\ \end{cases}

证明

证毕

扩展中国剩余定理(EXCRT)

定义

普通的中国剩余定理只能处理模数互质的情况,扩展中国剩余定理便为处理模数不互质而诞生 假设有一组同余方程如下\

x \equiv a_1~( \bmod~p_1)\\ x \equiv a_2~( \bmod~p_2)\\ .~~ . ~~.\\ x \equiv a_n~( \bmod~p_n)\ \end{cases}$ \ 扩展中国剩余定理同是用于求$~x~$的值\ 无需满足模数两两互质 ## 算法步骤(过程) 首先先观察其中一组同余方程组\ $\begin{cases} x \equiv a_1~( \bmod~p_1)\\ x \equiv a_2~( \bmod~p_2)\\ \end{cases}

如有新的式子,重复判断是否有解,确认有解执行合并式子\ 若无新式子,答案为~x_0~

证明

\xcancel{NOI级初等数论——敬请期待(楼主不会啊!!)}