前言
前段时间在补提高大纲,补完之后这篇博客用来记录梳理复盘提高大纲里数论的一些知识点,有错误欢迎批判捏。
欧拉函数
定义
φ(n) 表示小于等于 n 中与 n 互质的数的个数,即 φ(n)=∑nd=1[gcd(d,n)=1].
性质
1. 积性函数
根据这一条性质,我们可以用线性筛法来筛出欧拉函数。
2. 若 n=pk,其中 p 为一个质数,则 φ(n)=pk−pk−1.
证明
根据定义可知,更详细一点说,若存在一个数 x 满足 gcd(x,n)≠1,那么一定有 p|x,因此我们可以稍微用一点容斥的思想,pk 即是全集,而 pk−1 则是不符合 gcd(x,n)=1 的 x 的数量,相减即可得出答案。
3. 由唯一分解定理可得,n=∏si=1pkii,其中 p 为素数,那么可得 φ(n)=n×∏si=1pi−1pi.
证明
由性质一、性质二可得:
φ(n)=s∏i=1φ(pkii)=s∏i=1(pi−1)×pki−1i=s∏i=1pkii×(1−1pi)=n×s∏i=1(1−1pi)=n×s∏i=1pi−1pi
根据这一条,我们可以单点求欧拉函数,在推柿子的时候也经常用到,算是比较重要的一条性质。
4. n=∑d|nφ(d)
证明
若 gcd(k,n)=d,那么可以得到 gcd(kd,nd)=1,我们把这个结论称为结论一。
设 f(x) 表示 gcd(k,n)=x 的数的个数,那么 n=∑ni=1f(i).
由结论一可得 n=∑ni=1φ(ni) 即 n=∑d|nφ(nd).
因为 d 与 nd 具有对称性,所以 n=∑d|nφ(d).
这一条目前没遇到什么应用,不过了解一下也是好的。
一位大佬说可用于欧拉反演,但是我不会(逃,等会了再扩充。
欧拉定理
定义
若 gcd(a,m)=1,则 aφ(m)≡1(modm).
证明
设 r1,r2…rφ(m) 为模 m 意义下的一个简化剩余系,则 ar1,ar2…arφ(m) 也为模 m 意义下的一个简化剩余系,所以 r1r2…rφ(m)≡ar1ar2…arφ(m)≡aφ(m)r1r2…rφ(m)(modm),约分就可得 aφ(m)≡1(modm).
注:
剩余类:对于同一个整数 n,其余整数模 n 后有 0∼n−1 共 n 种情况,其中余数相同的称为同一剩余类。
简化剩余类(完全剩余系):在每一个剩余类中取一个数,构成的集合称为简化剩余类。
简化剩余系:从完全剩余系中取出 φ(n) 个与 n 互质的数所构成的集合。
费马小定理
定义
若 p 为素数,gcd(a,p)=1,则 ap−1≡1(modp).
证明:
因为 p 为素数,所以 φ(p)=p−1,由欧拉定理可得 aφ(p)≡1(modp),故 ap−1≡1(modp).
费马小定理在求乘法逆元时有用。
威尔逊定理
定义
对于素数 p 有 (p−1)!≡−1(modp).
证明
我们可以分为两种情况讨论:
-
当 p=2 时,有 (p−1)!=1,显然有 1≡−1(modp),因此威尔逊定理在 p=2 时成立。
-
当 p 为任意的奇素数时,1∼p−1 均存在逆元且唯一,对于每一个数 x,若满足 x≠x−1(modp),就可得 x×x−1=1,因此 (p−1)!modp 就等于逆元等于其本身即满足 x=x−1(modp) 的数的乘积,因为 p 为素数,所以这样的数只有 1 和 p−1,而 (p−1)modp=−1,威尔逊定理成立。
裴蜀定理(贝祖定理)
定义
设 a,b∈Z 且 a,b 不全为 0,则 ∃x,y∈Z 使 ax+by=gcd(a,b).
证明
我们可以分为两种情况讨论。
-
若 a=0 或 b=0,则 gcd(a,b)=a 或 b,定理显然成立。
-
若 a,b≠0,因为 gcd(a,b)=gcd(−a,b)=gcd(−a,−b)=gcd(a,−b),所以我们假设 a,b>0,a≥b,gcd(a,b)=d.
我们可以将等式两边同除 d,可以得到 a1x+b1y=1,其中 gcd(a1,b1)=1.
令辗转相除法在除到互质时退出,则 rn=1,可得:
rn−2=xnrn−1+1
即
1=rn−2−xnrn−1
由 rn−1=rn−3−xn−1rn−2 得
1=(1+xnxn−1)rn−2−xnrn−3
我们不断这么带入可以逐渐消去 rn−2…r1,可以证得 a1x+b1y=1,所以定理成立。
扩展欧几里得算法(exgcd)
exgcd 一般用于求解线性同余方程,而逆元也是一类特殊的线性同余方程。
基本思路
假设我们要求解不定方程 ax+by=gcd(a,b),其中 x,y 为未知数,那么我们可以在 a=gcd(a,b),b=0 时得到一组解 x=1,y=0,然后通过这一组特殊解来步步回溯求出原式的解。
其中不定方程 ax+by=m 有整数解的充要条件是 gcd(a,b)|m.
如何回溯
首先根据欧几里得算法可得:
ax+by=gcd(a,b)=gcd(b,amodb)=gcd(b,a−⌊ab⌋b)=bx0+(a−⌊ab⌋b)y0
又因为 gcd(b,a−⌊ab⌋b)=bx0+(a−⌊ab⌋)y0=bx0+ay0−⌊ab⌋by0
所以可以得到: ax+by=bx0+ay0−⌊ab⌋by0=ay0+b(x0−⌊ab⌋y0).
所以可以用 x=y0,y=x0−⌊ab⌋y0 来不断迭代更新回溯。
解系扩展
若 x0,y0 为不定方程 ax+by=n 的一组解,那么该不定方程的任意解可以表示为:
{x=x0+yky=y0−ak
其中 k∈Z
而一般题目会让我们求最小整数解,那么 x=(xmodt+t)modt,其中 t=bgcd(a,b).
模意义下的乘法逆元
定义
若一个线性同余方程 ax≡1(modb),则 x 称为 amodb 的逆元,记作 a−1.
exgcd 求解
很明显我们可以将该线性同余方程改写为 ax+by=1,用 exgcd 求解即可。
费马小定理求解
因为 ax≡1(modb),又因为由费马小定理可得 ax≡ab−1(modb),所以 x≡ab−2(modb),可以用快速幂求解。
线性求逆元
可以用来求解 1∼n 在模 p 意义下的逆元。
首先我们有 1−1≡1(modp) 恒成立,故 1 的逆元为 1.
接下来我们要求解 i−1,我们令 k=⌊pi⌋,j=pmodi,因为 p=ki+j,所以 ki+j≡0(modp).
同余式两边同乘 i−1×j−1 可得 kj−1+i−1≡0(modp),移项得 i−1≡−kj−1(modp),即 i−1≡−⌊pi⌋(pmodi)−1(modp).
综上:
i−1≡{1,if i=1−⌊pi⌋(pmodi)−1,else (modp)
在代码实现时 −⌊pi⌋ 写作 p−⌊pi⌋,防止出现负数。
线性求任意 n 个数的逆元
先计算 n 个数的前缀积,记作 si,然后计算 sn 的逆元记作 svn,很明显每次乘上 ai 就可以得到 a1∼ai−1 的积逆元,即 svi−1=svi×ai,所以 a−1i=si−1×svi,时间复杂度 Θ(n+logp).
线性同余方程
定义
形如 ax≡b(modn) 的方程称为线性同余方程,其中 x 为未知数。
逆元求解
当 gcd(a,n)=1 时,可以计算 a−1,然后方程两边同乘 a−1 可得唯一解。
证明
x≡ba−1(modp)
当 gcd(a,n)≠1 时,不一定有解。
设 d=gcd(a,n),当 d∤b 时无解。
若 d∣b,则同除 d 可得 a′x≡b′(modn′),此时 gcd(a′,n′)=1,可用逆元求解,而原方程有 d 个解,xi≡x′+in′(modn)(0≤i≤d−1).
exgcd 求解
线性同余方程可以改写为 ax+ny=b 的形式。
中国剩余定理(CRT)
作用
可用于求解形如以下的一元线性同余方程组,其中 n1,n2,…,nk 两两互质。
⎧⎪
⎪
⎪⎨⎪
⎪
⎪⎩x≡a1(modn1)x≡a2(modn2)…x≡ak(modnk)
基本思路
先计算所有模数的积记作 n,对于第 i 个方程,计算 mi=nni,然后再计算 m−1i,计算 ci=mim−1i,此时不要模 ni,方程组的唯一解为 x=∑ki=1aici(modn).
证明
当 i≠j 时,有 mj≡0(modni),故 cj≡mj≡0(modni),又因为 ci≡mi×(m−1imodni)≡1(modni),所以:
x≡k∑j=1ajcj≡aici≡aimi(m−1imodni)≡ai(modni)
所以该求法的正确性得证。
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探