BSGS(Baby Step Giant Step)
BSGS
应用:求解关于 $t$ 的同余方程 $a^t \equiv b\pmod p,(a,p)=1$ 的最小正整数解
核心思想:分块
做法:
因为 $(a,p)=1$,根据欧拉定理 $a^{\varphi(p)} \equiv 1 \pmod p$
所以 $a^t \equiv a^{t\text{ }\bmod\text{ }\varphi(p)} \pmod p$
所以 $t \in [0,\varphi(p)-1]$
由于 $p>\varphi(b)$,所以 $t \in [0,p]$
令 $k=\lfloor \sqrt p \rfloor +1$,则可以将 $0 \sim p$ 分成 $\sqrt p $ 段,每一段的长度为 $k$,则可以令 $t=kx-y,x\in[1,k],y \in [0,k-1]$ ,这样 $t$ 取不到 $0$,特判即可。
$$
a^t=a^{kx-y} \equiv b \pmod p\
a^{kx} \equiv b\cdot a^y \pmod p
$$
枚举 $x$,则需要判断是否存在一个 $y$ 满足上式,可以将右侧的值存进哈希表,每次查找即可。若查到一组 $(x,y)$ 满足上式,则可以求出一个 $t$。
洛谷 P3846 [TJOI2007] 可爱的质数/【模板】BSGS/AcWing 3124. BSGS
1 |
|
扩展BSGS
应用:求解关于 $t$ 的同余方程 $a^t \equiv b\pmod p$ 的最小正整数解,$a,p$不一定互质
做法:
若 $a^0 \equiv b \pmod p$,则 $t=0$
否则,$a^t \equiv b \pmod p $。
设 $(a,p)=d$,若 $d=1$,则按照 BSGS 处理,否则:
$$
a^t \equiv b \pmod p \Longleftrightarrow a^t+kp=b
$$
若 $d \not \mid b$ 则无解($a,p$ 均为 $d$ 的倍数,所以 $b$ 必须是 $d$ 的倍数),否则:
$$
a^t+kp=b \Longleftrightarrow \frac a d\cdot a^{t-1} + k \cdot \frac p d = \frac b d \Longleftrightarrow \frac a d \cdot a^{t-1} \equiv \frac b d \pmod {\frac p d} \
\xLeftrightarrow{(\frac a d,\frac p d)=1} a^{t-1} \equiv \frac b d \cdot (\frac a d)^{-1}\pmod {\frac p d}
$$
此时,记 $t’=t-1,b’= \frac b d \cdot (\frac a d)^{-1},p’=\frac p d$,则原式转化为 $a^{t’} \equiv b’ \pmod {p’}$,回到第一步,求出一个 $t’$,则 $t’+1$ 就是答案。
洛谷 P4195 【模板】扩展 BSGS/exBSGS/AcWing 3125. 扩展BSGS
1 |
|
例题:洛谷 P3306 [SDOI2013] 随机数生成器/AcWing 2526. 随机数生成器
小 $ W $ 喜欢读书,尤其喜欢读《约翰克里斯朵夫》。
最近小 $ W $ 准备读一本新书,这本书一共有 $ p $ 页,页码范围为 $ 0..p-1 $。
小 $ W $ 很忙,所以每天只能读一页书。
为了使事情有趣一些,他打算使用 NOI2012 上学习的线性同余法生成一个序列,来决定每天具体读哪一页。
我们用 $ X_i $ 来表示通过这种方法生成出来的第 $ i $ 个数,也即小 $ W $ 第 $ i $ 天会读哪一页。
这个方法需要设置 $ 3 $ 个参数 $ a,b,X_1 $,满足 $ 0 \le a,b,X_1 \le p-1 $,且 $ a,b,X_1 $ 都是整数。
按照下面的公式生成出来一系列的整数。
$$
X_{i+1}=(aX_i+b) \bmod p
$$其中 $ \bmod p $ 表示前面的数除以 $ p $ 的余数。
可以发现,这个序列中下一个数总是由上一个数生成的,而且每一项都在 $ 0..p-1 $ 这个范围内,是一个合法的页码。
同时需要注意,这种方法有可能导致某两天读的页码完全一样。
小 $ W $ 非常急切的想去读这本书的第 $ t $ 页。
所以他想知道,对于一组给定的 $ a,b,X_1 $,如果使用线性同余法来生成每一天读的页码,最早读到第 $ t $ 页是在哪一天,或者指出他永远不会读到第 $ t $ 页。
输入格式
输入含有多组数据,第一行一个正整数 $ T $,表示这个测试点内的数据组数。
接下来 $ T $ 行,每行有五个整数 $ p,a,b,X_1,t $,表示一组数据。保证 $ X_1 $ 和 $ t $ 都是合法的页码。
注意:$ P $ 一定为质数。
输出格式
共 $ T $ 行,每行一个整数表示他最早读到第 $ t $ 页是哪一天。
如果他永远不会读到第 $ t $ 页,输出 $ -1 $。
数据范围
$ 0 \le a \le p-1 $,
$ 0 \le b \le p-1 $,
$ 2 \le p \le 10^9 $输入样例:
1
2
3
4 3
7 1 1 3 3
7 2 2 2 0
7 2 2 2 1输出样例:
1
2
3 1
3
-1
分析:
$x_n=(ax_{n-1}+b)\bmod p$
若 $a=0$,则如果 $x_1=t$,则答案为 $1$,如果 $x_1 \ne t,b=t$,则答案为 $2$ ,否则无解。
若 $a=1$,若 $b=0$ ,则如果 $x_1=t$,则答案为 $1$,否则无解,否则 $x_n=x_{n-1}+b=x_1+(n-1)b\equiv t \pmod p$,也就是解同余方程 $x_1+(n-1)b\equiv t \pmod p$,相当于解不定方程 $(n-1)b + mp = t -x_1 $,使用扩展欧几里得算法。
首先要求出通项公式,由于每一项都是模 $p$ 意义下的,因此可以省略 $\bmod p$,即求 $x_n=ax_{n-1}+b$ 的通项公式。
设 $x_n=ax_{n-1}+b$ 等价于 $x_n+c=a(x_{n-1}+c)$,解得 $c=\frac b {a-1}$
原式等价于 $x_n+\frac b {a-1}=a(x_{n-1}+\frac b {a-1})=a^{n-1}(x_1+\frac b {a-1})$
所以 $a^{n-1} \equiv \frac {x_n+\frac b {a-1}} {x_1+\frac b {a-1}} \pmod p$
由于要求最小的 $n$ 使得 $x_n=t$ ,因此将式子中的 $x_n$ 换为 $t$ 即可。
$a\ge 2,b\ge 1,1\le a-1\le p-2$,所以原式分数上下各部分都与 $p$ 互质,因此使用有理数取模将右侧转化为一个整数 $b’$
$$
a^{n-1} \equiv \frac {x_n+\frac b {a-1}} {x_1+\frac b {a-1}} \equiv [x_n+b(a-1)^{-1}] [x_1+b(a-1)^{-1}]=b’ \pmod p
$$
所以原式转化为 $a^{n-1} \equiv b’ \pmod p$,使用 BSGS 求解即可。
1 |
|