首页 > 其他分享 >BSGS

BSGS

时间:2024-11-19 14:57:14浏览次数:1  
标签:map le frac pmod sqrt BSGS equiv

给定 \(a, b, p\)。求最小非负整数 \(x\) 使得 \(a^x \equiv b \pmod p\),或报告无解。

保证 \((a,p)=1\)。

首先根据欧拉定理,\(a^x \equiv a^{x \bmod \varphi(p)} \bmod p\)。所以最优的 \(x\) 一定不大于 \(\varphi(p)\)。换一个比较松上限 \(p\)。

不妨先随便找一个数 \(k\)。这个数具体是啥后面再提。

可以证明一定存在一组 \((i,j)\) 使得 \(x=ki-j\) 且 \(j \le k\)(如果 \(j>k\),那么 \(i'=i-1,j'=j-k\) 同样是一组合法的构造)。那么又可以推出 \(i=\frac{x+j}k\),而其中 \(\frac jk \le 1\),\(x \le p\),所以 \(i \le \frac pk\)。

那么条件变成了 \(a^{ki-j} \equiv b \pmod p\)。同乘 \(a^j\) 得到 \((a^k)^i \equiv ba^j \pmod p\)。现在要判断是否存在一组 \((i, j)\) 满足这个条件且 \(i \ge \frac xk,j \le k\)。

考虑暴力。首先枚举 \(j\),把所有 \(ba^j \pmod p\) 存储到 map 中。注意如果同一个值对应多个 \(j\) 应保留最大一个。因为我们要最小化 \(ki-j\)。

然后枚举 \(i\),看一下 map 中是否存在 \((a^k)^i \bmod p\)。如果存在,记录最小的 \(ki-j\),这个 \(j\) 是通过 map 得到的。

复杂度?其实就是 \(i,j\) 的枚举量,即 \(\mathcal O(\frac pk + k)\)。别忘了这个 \(k\) 的具体值还没有定,现在是时候了。根据均值不等式,\(\frac pk+k\) 在 \(k = \sqrt p\) 时取得最小值 \(2\sqrt p\)。也就是说,\(k\) 取 \(\sqrt p\),可以得到最优复杂度 \(\mathcal O(\sqrt p)\)。然后还会带一个 map 所以真实复杂度是 \(\mathcal O(\sqrt p \log \sqrt p)\)。不难发现可以用 Hash 表将这个 \(\log\) 去掉,这就不是最重要的问题了。

标签:map,le,frac,pmod,sqrt,BSGS,equiv
From: https://www.cnblogs.com/2huk/p/18554867

相关文章

  • 卡特兰数、Prufer 序列、BSGS 总结
    卡特兰数定义给定\(n\)个\(0\)和\(n\)个\(1\),它们构成一个长度为\(2n\)的排列,满足任意前缀中\(0\)的个数都不少于\(1\)的个数的序列的数量为卡特兰数列。显然\(H_0=H_1=1\)。(\(H\)为卡特兰数列)通项公式:\[H_n=\frac{\dbinom{2n}{n}}{n+1}\quad(n\ge2,n\in\math......
  • 扩展 BSGS 学习笔记
    在之前,我们学习了BSGS。设有\(a,b,m\),且\((a,m)\ne1\),求解:\[a^x\equivb\pmodm\]这玩意如何求解?把它变成BSGS能做的形式不就行了!具体的,设\(d_1=(a,m)\),若\(d_1\not|b\)则方程无解。否则我们可以得到:\[\dfrac{a}{d_1}\cdota^{x-1}\equiv\dfrac{b}{d_1}\pmod{\d......
  • 离散对数 & BSGS 学习笔记
    离散对数离散对数的定义方式和对数类似.取有原根的正整数模数\(m\),设其一个原根为\(g\).对满足\((a,m)=1\)的整数\(a\),我们知道必存在唯一的整数\(0\leqk<\varphi(m)\)使得\(g^k\equiva\pmodm\).我们称这个\(k\)为以\(g\)为底,模\(m\)的离散对数,记作\(k......
  • BSGS 学习笔记
    BSGS拔山盖世、北上广深……实际上叫大步小步,用于解决高次同余方程,形如:\[a^x\equivb\pmodp\]求\(x\)。设\(x=i\timest-j\),有:\[a^{i\timest-j}\equivb\pmodp\]\[a^{i\timest}\equivb\timesa^j\pmodp\]预处理每个\(j\),枚举\(i\)处理,\(t\)取\(\sqrtn\)最......
  • 扩展BSGS/exBSGS
    先看这篇题解下面是一些注释首先,这篇题解的做法相当于是跟蓝书上插入查询的对象刚好反过来,也没有问题然后,是对这篇题解存前两个的解释首先是为什么会存在这个问题?我们考虑\(a^{p_1t}\)和\(a^{p_2t}\),其中\(p_1<p_2\)而且\(a^{p_1t}\equiva^{p_2t}(mod\:p)\)那么我们在枚举......
  • 卡特兰数、Prüfer 序列、BSGS
    1卡特兰数1.1概述卡特兰数的前几项是$1,1,2,5,14,42,132,429,1430,4862\cdots$。卡特兰数在组合数学中有着许多应用。下面给出一个经典例子:在网格中向右或向上走,从$(0,0)$走到$(n,n)$,并且不能越过对角线的路径条数。该问题的结果就是卡特兰数,记为$H_n$。1.2通项公......
  • 不可根号 BSGS 时的若干解决办法
    许多题如果用\(O(\sqrtp)\)的\(\texttt{BSGS}\)会超时,下面是我见过的若干解决办法。前置知识:原根,离散对数,阶,BSGS。下文设原根为\(g\),\(\text{ord}_r(a)\)表示\(a\)模\(r\)的阶。科技重新平衡复杂度可以\(O(B+\frac{np}{B})\)求出\(n\)个数的离散对数,只是把原来......
  • BSGS学习笔记
    1.求解问题1.1.高次同余方程给定\(a,b,p\),\(a,p\)互质,求满足\(a^x\equivb(\bmod\p)\)的解\(x\)2.解法由扩展欧拉定理\(a^p\equiva^{x\mod\\varphi(p)}\(\bmod\p)\)得\(a^x\)模\(p\)意义下的最小循环节为\(\varphi(p)\)\(\because\\varphi(p)<p\)......
  • BSGS
    BSGS简介BSGS(BabyStep,GiantStep)算法,用于解决高次同余方程,即给定整数\(a,b,p\),其中\(a\perpp\)(互质),求解最小非负整数\(x\)使得\(a^x\equivb\pmodp\)。算法流程将\(a^x\equivb\pmodp\)化为\(a^{\lceil\sqrt{p}\rceil\cdotk-s}\equivb\pmodp\),......
  • 求解离散对数的方法:BSGS
    离散对数问题:在循环群(循环群的定义见密码协议学习笔记(1.4):密码学的一些数学基础-Isakovsky-博客园(cnblogs.com))$(\mathbb{G},\cdot)$上已知两个元素$g,h\in\mathbb{G}$,求式子$g^x=h$中$x$的值的问题,叫做离散对数问题,亦可记为$x=\log_gh$BSGS(BabyStepGiantStep......