BSGS 算法
可爱的质数/[模板]BSGS
给定整数 a,b,p,其中 a,p 互质,求一个非负整数 x,使得 ax≡b(modp)
朴素算法概述:
考虑一个暴力算法,在 mod p 的意义下,ax 显然有一个长度为 φ(p) 的循环节,所以只需要考虑 x≤φ(p) 的情况即可。
暴力枚举 x 求解,时间复杂度 O(φ(p)),最坏 O(p−1)
而 BSGS 则运用类似于拆半搜索的思想,将 x 表示成 i×t−j 的形式。
于是原式 →ai×t≡b×aj(modp)
固定 t 的值,预处理出右式所有可能的取值。
枚举计算左式可能的值,当枚举到某个在右边已经出现过的值时,此时 i×t−j 就是我们要求的 x。
t 的取值:
j 的取值为 φ(p)modt 共计 t−1 个,i 的取值有 ⌈φ(p)t⌉ 个。
t 取 √φ(p) 时有最优复杂度(最平均),但为避免计算 φ(p),近似取 t=√p 即可。
时间复杂度 O(√p)
多少个1?
exBSGS
[模板]扩展 BSGS/exBSGS
求解 ax≡b(modp) 需要满足条件 a⊥p ,而 exBSGS (扩展 BSGS)主要解决 a⊥/p 的情况。
设 d=gcd(a,p),若我们把同余式两边同时除以 d ,如此可以构造互质。
因为 d∣axmodp,所以 b≠1 时,必然有 d∣b ,否则原同余式无解。
于是原式 →ax−1ad≡bd(modpd)
运用 exgcd ,原式 →ax−1≡bd(ad)−1(modpd)
但是 a 不一定与 pd 互质,于是递归进入子问题求解,直到 a 与模数互质(d=1)为止。
阶
若对于 p∈N+,p≠1,a∈Z, 满足 gcd(a,n)=1,则必定 ∃ r∈N+, s.t. ar≡1(modp)
满足 ar≡1(modp) 的最小 r 称为 a 模 r 的阶,记为 ordp(a)=1
Theorem 1.1: 若 ordp(a)=r ,则对于 ∀b∈N+ 满足 aq≡1(modn),都有 r∣q 。
证明:
反证法,若 r∤q ,设 q=kr+b(0<b<r),则 aq≡akr+b≡akr×ab(modp)
由于 akr≡ar≡1(modp) ,可推知 ab≡1(modp)。
因为 b<r ,这便与阶的定义矛盾。
故命题得证。
特别地,
- 由欧拉定理知,r∣φ(n)
- 当 p 为素数时,由费马小定理知:r∣n−1
原根
定义:设 p 是正整数,a 是整数,若 a 模 p 的阶等于 φ(p),则称 a 为模 p 的一个原根。
模板题 : 【模板】原根 - 洛谷
以下结论证明从略。
Theorem 2.1: 形如 2,4,2pc,pc 的数才有原根,其中 p 为奇素数。
Theorem 2.2:
当求出一个原根 g 时,可以按照如下方法构造出其他所有原根:所有的 gk,k⊥φ(p) 。
(gk)φ(p)≡1(modp)
若存在 (gk)x≡1(modp),x<φ(p)
那么必然存在 gkxmodφ(p)≡1,与 g 是原根矛盾。
由上可知,p 的原根共有 φ(φ(p)) 个。
Theorem 2.3:
判断 a 在 modp 意义下的阶是否为 φ(p) 时,只需要求得 φ(p) 的质因数 p1,p2…,然后判断 aφ(p)pi 即可。
由定理 1.1 可知,判定 ax≡1 只需判定 φ(p) 的所有约数即可。
又 ax≡1 时,必定有 acx≡1 。
那么,可以证明取出所有 φ(p)/pi 即可判断 a 的阶是否为 φ(p) 。
根据如上三个定理,即可通过此题(注意特判模数为 2 的情况)。
Theorem 2.4: 设 g 为 p 的原根,则 g1,g2…gφ(p) 构成 mod p 下的简化剩余系。
易得出,g1∼gφ(p) 两两均不相同。
由于 g 与 p 互质,所以 g1,g2…gφ(p) 构成 mod p 意义下的简化剩余系。
指标
Theorem 2.5:
设 g 为 mod p 的一个原根,对于与 p 互质的整数 a ,存在唯一的整数 x 满足,gx≡a(modp) 。
由 Theorem 2.4 易得。
定义:
对于上述 x ,就称 x 为以 g 为底,modp 的一个指标,记为 x=indp,ga
在无歧义时,简记为 x=ind(a)。
由指标的定义不难得出以下性质:
Theorem 2.6:
a≡b(modp)⇔ind(a)≡ind(b)(modφ(p))
Theorem 2.7:
ind(ab)≡ind(a)+ind(b)(modφ(p))
Theorem 2.8:
ind(ak)≡k∗ind(a)(modφ(p))
小A与两位神仙
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】