同余数论

数论:同余相关

1. 基本定义与记号

  • 剩余类:模 n 同余的所有数构成的等价类被称为模 n 的剩余系。模 ni 的剩余类记作 Ki
  • 完全剩余系:从 n 个模 n 剩余系中各选一个数 a0,a1...an1,他们构成模 n完全剩余系
  • 简化剩余系:从与 n 互质的剩余类中各选一个数 a1,a2...akk=φ(n),简化剩余系又被称为 既约剩余系缩系
  • 质因子次数符号 vp(n)
  • 各位数字之和符号 sp(n) 表示 np 进制下各位数字之和。

2.费马小定理

引理:pP,其因子只有两个。因此,若两个数相乘是 p 的倍数,其中至少一个一定是 p 的倍数。

a 不是 p 的倍数时,不存在 xy,且 1x,y<p 使得 xaya(modp),因为引理告诉我们,xyp 的倍数,与 1x,y<p 限制矛盾。

进一步,考虑 1p1 所有数,他们乘以 a 之后在模意义下互不相同,说明结果仍然是 1p1 所有数。

因此,i=1p1ii=1p1ai(modp),又因为 i 显然不是 p 的倍数,所以:

ap11(modp)

该结论称为 费马小定理,适用于 p质数,且 a 不是 p 的倍数的情形。即 ap

3. 线性求逆元

1.求连续自然数的逆元

p=ki+r,其中 p 是模数,将其表示为除以 i 的商和余数。有:

ki+r=0(modp)

左右同乘以 i1r1,有:

kr1+i10(modp)i1kr1(modp)i1pi×(pmodi)1(modp)

inv[1] = 1;
for(int i = 2; i < p; ++ i)
    inv[i] = (p - p / i) * inv[p % i] % p;

2.求连续阶乘的逆元

invi+1=1(i+1)!,invi+1×(i+1)=invi

因此需要先 O(log) 求出 n! 的逆元,然后逆推即可。

3.求任意n个数的逆元

与连续阶乘类似,先计算 n 个数的前缀积,记为 siO(nlog) 求得 sn 的逆元,记作 svn。有递推式:

svn1svn×an(modp)invnsvnsn1(modp)

4. 威尔逊定理

引理x21(modp) 当且仅当 x=±1。同样用于二次剩余相关。

证明:使用平方差公式:(x1)(x+1)0(modp)x=p1,x=p+1

由于乘法逆元成对存在,这启发我们思考,1p1 所有数能否两两配对互为逆元,发现除了 ±1 以外均可以,且这两个根据引理自我配对。

这说明了威尔逊定理: (p1)!1(modp)。相当于不管 1,只剩下一个 p1。对于特殊情况 p=2 依然满足。

拓展:

(pk!)p{1p=2k31otherwise

用于 exLucas。

5.Legendre公式

问题:n! 中质因子 p 的指数,即 vp(n!)。这对我们处理组合数很有用。

vp(n!)=i=1logpnnpi=nsp(n)p1

特别的,当 p=2 时,v2(n)=npopcount(n)

6.Kummer定理

7. 剩余系与环

结论:在长为 n 的环上每一步走 k 条边,形成的子环个数为 gcd(n,k) 且环长为 ngcd(n,k)

感性理解:给环标号,走到的点模 gcd(n,k) 一定相同,且可以证明一定能走到所有同剩余系的点。

8 拓展欧几里得算法

用于求解形如 ax+by=c二元线性不定方程

解的存在性:裴蜀定理 gcd(a,b)|c

证明:左式一定是 gcd(a,b) 的倍数,因此只需考虑 c=c/gcd(a,b) 的情形即可。即 a,b 均除以 gcd。此时 ab。只需证明 axmodb 可以取得 0p1 的所有数,相当于费马小定理。

求解:

只需先求 ax+by=gcd(a,b) 即可,再将解乘以 cgcd。根据裴蜀定理,解的存在性保证。

回忆辗转相除法的过程,我们用了关键结论:gcd(a,b)=gcd(b,amodb)

ax1+by1=gcd(a,b)bx2+(abab)y2=gcd(b,amodb)ax1+by1=(abab)y2+bx2x1=y2,y1=x2aby2

注意,前后 x1x2,y1y2。但是 a,b,gcd 是相同的。

值域限制:可以证明,直接求的特殊解一定有 |x|b,|y|a。因此不必再开大一个数据类型。

一般解的形式:

D=(aΔx)=(bΔy),有 a,b|D,故 lcm(a,b)|DΔx=klcm(a,b)a=kbgcd(a,b)

{x=x0+bgcdky=y0agcdk(k\Z)

应用:

  1. 求逆元:不要求 p 是质数,只需 a,p 互质。将其看做 ax+py=1 的最小正整数解 x 即可。
  2. 逆元个数:0p1 中有 gcd(a,p)a 的逆元,显然只有在 p 不是质数时有多个逆元。
  3. ab,则 axmodb 取遍 0b1,这是比费马小定理强的结论。

9. 欧拉函数

定义:[1,n] 中与 n 互质的个数记作 φ(n)φ(1)=1

性质 1:φ(pk)=(p1)×pk1=pk1φ(p)

p 个数只有 kp 与它不互质,这也间接证明了积性。

性质2:φ(n)=npi1pi

将性质 1 与积性带入即可。

性质3:a|b,那么 φ(ab)=aφ(b)

根据性质 2,b 中已经包含了 a 的所有质因子。应用于线性筛。

欧拉反演

d|nφ(d)=nφI=id

证明:考虑枚举 gcd(i,n)=d,那么满足的 i 的充要条件是 i/dn/d,这样的 iφ(n/d) 种(得到的结果均再乘以 d)。

欧拉定理

考虑 1p1 中与 p 互质的数,将其记作 c1,c2,,cφ(n),根据裴蜀定理,若 ap,则 axmodp 取遍 0p1互不相同。因此,ac1,ac2,,acφ 仍然互不相同,且与 p 互质。因此两个集合是相同的,他们的乘积也相同。

i=1φ(n)cii=1φ(n)aci(modp)1aφ(m)(modp)

扩展欧拉定理

ab{ab mod φ(p)gcd(a,p)=1abgcd(a,p)1,b<φ(p)ab mod φ(p)+φ(p)gcd(a,p)1,bφ(p)(modp)

10. 离散对数

离散对数问题即在模意义下求 logab=x,这等价于:

axb(modp),ap

考虑 Meet in the Middle,我们运用分块平衡思想,先大步求出 an,a2n,,akn,并将他们的逆元作为下标扔进 map 里,注意到这里逆元不是瓶颈。即 Giant Step。

问题变为,找到一个 xn,使得 axc,找到这样的 x 即可。即小步 Baby Step。复杂度 O(plog)

笑点解析:1. BSGS的B不是Big而是Baby,2.BSGS和大步小步是反着来的。

实际上,可以用哈希表做到 O(p)。具体的,设 x=kBr,则有 akBbar,这样就不需要求逆元了。

我们从小到大枚举指数,所以得到的是最小非负整数解。

logab 实际上有循环节,循环节长度被称为阶ord

exBSGS

如果没有 ap,我们可以尝试将其凑成互质:将等式两边同时除以 d=gcd(a,p),那么方程变为:

adax1bd(modpd)

db 则无解。

此时 ad,pd 互质,但不一定是质数,因此需要 exgcd 求逆元。移项,方程变为 ax1bd×(ad)1(modpd)。若此时 apd,则直接使用 BSGS 求解,否则递归进行,直到互质。

注意:BSGS前每次递归操作,a 的指数都会减一,所以记录操作次数 t,最终答案 x=x+t

时间复杂度 O(log2+p)

11. 阶与原根

n 的简化剩余系在模 n 乘法意义下封闭且构成群,满足封闭性和结合律,存在逆元和单位元。将群相关的定义应用在其上,得到阶和原根(循环群生成元)的概念。

阶的定义如下:使得 ax1(modm)最小正整数 x 被称作 am 的阶,记作 δm(a)。即 loga1,换句话说,一个数自乘若干次,第一次得到 1 的自乘次数。与群论中ord的定义相同。

am 是存在 δm(a) 的充要条件。

性质1:a1,a2,,aδm(a) 模意义下两两不同。

证明:aiaj(modm),那么 aij1(modm) 与阶的最小性矛盾。

性质2:an1(modm),那么 δm(a)|n

性质3:

δm(ab)=δm(a)δm(b)gcd(δm(a),δm(b))=1

性质4:

δm(ak)=δm(a)gcd(δm(a),k)

求阶:

  1. 使用 BSGS,复杂度 O(m)
  2. 根据性质2,首先令 x=φ(m),对于 φ(m) 的每个质因子 px 不断试除 p 直到无法整除。

原神

原根的定义如下:对于 m\N+a\Z,且 am,若 δm(a)=φ(m),则称 a 为模 m 的原根。

更直观的,a 是模 m 的原根,那么(欧拉定理):

aφ(m)1(modp)

且对于任意小于 φ(m) 的指数,都不满足。

并不是所有数都有原根,存在原根的模 m 既约剩余系同构与循环群,因为这一概念等价于循环群中的生成元。

原根的若干次幂在模意义下取遍了所有与 m 互质的数

原根判定定理:对于任意 φ(m) 的质因子 p,均有 aφ(m)p1

原根存在定理:一个数存在原根的充要条件是 m=2,4,pa,2pa,其中 p奇质数

原根个数定理:φ(φ(m))

最小原根大小:上界为 O(m0.25),实际大多会非常小,暴力枚举即可。

原根转加法

要求 ab(modm),可以令 a=gx,y=gb,那么就是 gx+y(modm)。相当于实数中的对数函数。

posted @   Apricity8211  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示