Baby Step Giant Step 初步

Baby Step Giant Step(BSGS) 低于线性时间复杂度的离散对数算法 转载请注明 目录 1.离散对数问题 2.BSGS介绍 3.必要的理论知识 3.1费马小定理 3.2第一个引理 3.3同余式有解的充要条件 3.4第二个引理 4.BSGS算法的具体内容 4.1 满足(a,c) = 1 4.1.1解的形式和通解 4.1.2具体内容 4.2不满足(a,c) = 1 4.2.1变形 4.2.2如法炮制 ... 阅读详情

引入

对于 a , b , m ∈ N , gcd ⁡ ( a , m ) = 1 a,b,m\in\N,\gcd(a,m)=1 a,b,m∈N,gcd(a,m)=1 求解指数同余方程
a x ≡ b ( m o d m ) a^x\equiv b\pmod m ax≡b(modm)
的最小正数解。


BSGS (Baby step Giant step)

我们考虑余数是存在循环节的,也就是说某个数   m o d   m \bmod m modm 只有 [ 0 , m − 1 ] [0,m-1] [0,m−1] 个取值,于是我们尝试寻找 a x   m o d   m a^x\bmod m axmodm 的循环节。
由欧拉定理可知 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}\equiv 1\pmod m aφ(m)≡1(modm) ,因此有 a x   m o d   m a^x\bmod m axmodm 的取值只有 φ ( m ) \varphi(m) φ(m) 种,一旦 x x x 大于 φ ( m ) \varphi(m) φ(m),那么就会与之前的值重复,答案不是最优。这个想法也可以从欧拉定理的推论 a b   m o d   φ ( m ) ≡ a b ( m o d m ) a^{b\bmod \varphi(m)}\equiv a^b\pmod m abmodφ(m)≡ab(modm) 得到,万变不离其宗。
于是有暴力思想,枚举 [ 1 , φ ( m ) ] [1,\varphi(m)] [1,φ(m)] 的数作为 x x x 的值,暴力判断是否满足方程。但是当 m ≥ 1 0 8 m\ge 10^8 m≥108 且为质数时, φ ( m ) = m − 1 ≥ 1 0 8 \varphi(m)=m-1\ge 10^8 φ(m)=m−1≥108 ,该思路任然会超时。

于是我们就引入了“优化暴力”的 B a b y   s t e p   G i a n t   s t e p Baby~step~Giant~step Baby step Giant step 算法,简称 B S G S \mathbf{BSGS} BSGS

考虑 gcd ⁡ ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1,因此我们可以对同余式进行整除运算(裴蜀定理可得吧,这里就不赘述了),即可以将 x x x 表示为 x = i ⋅ t − j x=i\cdot t-j x=i⋅t−j,我们设 t = ⌈ m ⌉ t=\left\lceil\sqrt m\right\rceil t=⌈m ​⌉。
于是原方程变为
a i ⋅ t − j ≡ b ( m o d m )   a i ⋅ t a j ≡ b ( m o d m )   a i ⋅ t ≡ b ⋅ a j ( m o d m )   ( a t ) i ≡ b ⋅ a j ( m o d m ) a^{i\cdot t-j}\equiv b\pmod m\\ ~\\ \dfrac{a^{i\cdot t}}{a^j}\equiv b\pmod m\\ ~\\ a^{i\cdot t}\equiv b\cdot a^j\pmod m\\ ~\\ (a^t)^i\equiv b\cdot a^j\pmod m ai⋅t−j≡b(modm) ajai⋅t​≡b(modm) ai⋅t≡b⋅aj(modm) (at)i≡b⋅aj(modm)

此时我们将原方程的 x x x 分块来枚举,就可以均摊复杂度。
我们先枚举方程右边的 j j j ,然后将 j j j 取值,按照右边的余数对应存进一个 h a s h hash hash 表里(说是这么说,但是我还是常用 m a p map map 或 u n o r d e r e d unordered unordered_ m a p map map ),然后同理枚举方程左边的 i i i ,查找是否有 j j j 与 i i i 方程两边余数匹配,即同余(这时候就用上先前的 h a s h hash hash 表来查找),若匹配则直接得到答案 x = i ⋅ t − j x=i\cdot t-j x=i⋅t−j。

当 i , j i,j i,j 取 [ 1 , t ] [1,t] [1,t] 的值时,我们可以得到所有 x ∈ [ 1 , m − 1 ] x\in[1,m-1] x∈[1,m−1] 的解,显然符合先前所得的答案范围 [ 1 , φ ( m ) ] [1,\varphi(m)] [1,φ(m)] 。
但是这个算法是可以通过的,时间为 Θ ( m ) \Theta(\sqrt m) Θ(m ​) 。
此算法与原先纯暴力最大的不同,就是我们将枚举进行了分块,将枚举范围分为了两部分,各为 m \sqrt m m ​,这种思想有点像折半搜索(砍两瓣,分开搜索),将暴力复杂度拆开了。

这就是 B S G S \mathbf{BSGS} BSGS ,也就是一种优化了的暴力算法。

回忆一下思路,其实也很清晰,就是把答案分成两部分分别枚举然后对应查找,于是代码也很好实现。

int BSGS(int a,int b,long long p)
{
   map<int,int> vis;
   int t=sqrt(p)+1,mi=1;
   for(int i=1;i<=t;i++)
   {
       if(i!=0) mi=(__int128)(mi*a)%p;
       vis[(__int128)(b*mi)%p]=i;
   }
   a=mi;
   if(!a) return (b%p==0)?1:-1; //特判,若a能被模数整除,那么当且仅当b也能被模数整除的情况下存在最小正数解 1,否则无解
   mi=1;
   for(int i=1;i<=t;i++)
   {
     map<int,int>::iterator it;
     if(i!=0) mi=(__int128)(mi*a)%p;  //暴力求余
     it=vis.find(mi);  //查找对应
     if(it!=vis.end())
       if((__int128)i*t-(it->second)>=0) return (__int128)(i*t-(it->second));
   }
   return -1;
}

总结

回过头来, B S G S \mathbf{BSGS} BSGS 真的不难理解,其实只要思路正确,暴力都能成为好算法。

奉上例题:

P4884
P2485
P4861
P4454
P3306

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧 本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。 阅读详情

相关推荐

从三极管到MOS管:单片机I/O口驱动电路设计实战解析

本文深入解析了从三极管到MOS管的单片机I/O口驱动电路设计实战经验。通过对比三极管与MOS管的本质区别,结合实际案例详细讲解了驱动电路的设计要点、优化技巧及常见问题解决方案,帮助工程师高效完成各类负载驱动设计。

weixin_29161785的博客 320

Baby-Step Giant-Step & Homomorphic DFT

文章 [Shoup95] 研究并实现了 BSGS factoring method,用于将单变元多项式分解为不可约因子。其中使用了 CRT 和 FFT 来表示多项式(比 GHS12 的 Doube-CRT 更早) ,并且实现了多项式的快速乘法、除法、逆元、平方、GCD 等等运算。多项式分解可以分为三步,主要步骤集中在 step 2,[Shoup95] 观察到事实:对于任意的非负整数 a,b∈Z+a,b \in \mathbb Z^+a,b∈Z+,多项式 ha,b(x)=xpa−xpb∈GF(p)[

weixin_44885334的博客 1487

用Pixel5玩转AOSP:从零开始定制Android13系统(含GMS集成方案)

本文提供了一份详尽的Pixel 5 AOSP定制指南,涵盖从环境搭建、源码下载、系统编译到刷机的完整流程。重点解决了原生AOSP缺失Google移动服务(GMS)的难题,分享了从官方镜像提取并集成GMS组件的实战方案,助你打造独一无二的Android 13系统。

sam99的博客 527

每日小结2 baby-step_giant_step

维基百科:baby-step_giant_step名字已经暗示了算法的精髓。感觉和桶计数很像。就是把小单位合并。用大单位和小单位一起精确查找。和杭州网络赛的中值滤波很像呀。an==b(mod c)  给定你n的范围。可能很大。但是由数论的知识知道n简单论述一下啊:{an},n~1,2,3... 可以看成a的生成群。其实也不是严格的。严格的a必须与c互质才行。因为不互质的话,a是没有逆元的。再次对上句话进行证明。(ps:为啥我老是证明呢。因为我刚学。很多东西都不能像加减乘除那样一眼看出来。还有可能是反应慢吧。

coder notebook 909

实现自己的AI视频监控系统-第一章-视频拉流与解码4(重点)

使用本章节代码请引用此优快云链接,尊重知识、尊重他人劳动。这一小节将正式进入代码实现部分。我们会结合实际业务需要和拉流解码流程实现一个灵活、轻便、易用的视频拉流解码模块,支持多路视频拉流解码且可以动态更新更新内部参数。在开始设计之初,我们首先考虑的是使用大家所熟知的 **OpenCV(cv2.VideoCapture)**来实现拉流和解码功能。它的 API 简单直接,几行代码就能实现从网络流中读取帧,对于快速原型验证来说非常方便。然而,在经过深入的调研和测试后,我们发现 OpenCV 在处理多路视频流、追

soulproficiency的博客 2268

无人驾驶之车辆控制(1)纯跟踪(Pure Pursuit)算法与Stanley算法

目录引言1 Pure Pursuit纯几何跟踪算法1.1 车辆运动学自行车模型1.2 算法原理1.3 仿真测试2 Stanley算法2.1 算法原理2.2 仿真测试3 总结 引言 本文对Pure Pursuit以及Stanley control两种算法进行了调研以及初步的性能摸底。 1 Pure Pursuit纯几何跟踪算法 1.1 车辆运动学自行车模型 运动学是从几何学的角度研究物体的运动规律,...

zxxxxxxy的博客 2万+

POJ 2417 Discrete Logging (baby_step,giant_step算法)

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 题目:http://poj.org/problem?id=2417 高次同余方程。   BL == N (mod P) 求解最小的L。由于数据范围很大,暴力不行 这里用到baby_step,giant_step算法。意

窝不是爱酱,喵~~~~ 6719

addr2line解析不出来行号的解决方式(汇编解析高阶版)

摘要:本文针对AEC crash问题中addr2line无法解析行号的情况,通过llvm-addr2line和反汇编分析,定位到CamX::AECBEStats17::AdjustROIParams函数中的乘法溢出问题。关键发现包括: 常规addr2line只能解析到函数名但无具体行号 llvm-addr2line解析出多个可能溢出点(行196/204/211/218/270/271) 反汇编显示6个条件分支跳转到溢出处理函数 源码分析确认这些位置均存在乘法运算 最终通过汇编级调试工具成功定位UBsan报告

168

离散对数学习:baby_step_giant_step与ex_baby_step_giant_step算法

对于问题 b ^ x == N % mod 的问题,知道b,N,mod,求最小指数 x; 思路: 令x = i * m + j,m为ceil(sqrt(double(mod))); 那么的话等式为 b ^ j == N * b ^ ( - m * i) % mod,要求x,那么就是把满足这个方程的 i , j 求出来,i,j的范围为m = ceil(sqrt(double(mod)))

Everything can be done! 869

raw (R/G, B/G) 色度域从白点筛选到 mired 直方图的完整构建流程

raw 域用draw​δraw​筛出白点后,。,与 CIE uv 域流程逐步对应。

大熊 39

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 330

pku3243(baby_step, giant_step算法)

<br />http://162.105.81.212/JudgeOnline/problem?id=3243<br />题意:给定XY mod Z = K已知X, Z, K 求最小的Y值,这题和pku2417差不多,都是用这个算法的,但是我差了很多资料,理解还不是很好啊,今天看了AC大牛的解题报告,学习了他的写法,,膜拜下~~~上面写的很清楚,但是俺菜还是不够理解啊~<br />http://hi.baidu.com/aekdycoin/blog/item/b317ca18bb24334942a9ad55

弓虽子 1754

【异常】OpenClaw 项目 `fetch failed` 报错问题排查与解决方案Response interrupted: TypeError: fetch failed

针对无超时控制、异常兜底缺失导致的请求中断,封装标准化的安全请求工具,一次性解决超时控制、异常捕获、日志埋点三大问题,全项目替换原生。:将项目运行的 Node.js 版本升级至 18.x 及以上 LTS 版本,使用 Node.js 内置的稳定版。实现的网络请求环节,包括但不限于:第三方开放接口调用、内部服务接口通信、跨域资源请求、外部配置拉取等场景。:针对无法升级 Node.js 版本的存量环境,通过社区稳定兼容包替换原生。类型异常,直接造成业务请求响应中断。第二步:业务代码改造,替换原生。

奶爸的编程之路,也就一周冷个三天 367

Baby-step Giant-step and its extension

from wikipedia In group theory, a branch of mathematics, the baby-step giant-step is a meet-in-the-middle algorithm for computing the discrete logarithm or order of an element in a finite abelian group due to Daniel Shanks. The discrete log problem is of

Layomiiety的博客 452

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Baby-Step Giant-Step算法

求解上式,0<=x<n的解,其中n是素数和n不是素数都可以。 求解思路: 令x=k*t+i(t是常数,代表的是大步,i也是常数,代表的是小步),式子变为: 化简后得到: 将(,i)存入表中,然后枚举k,在表中查找即可。 时间复杂度为O(n+p/n),如果取n=sqrt(p)的时候,时间复杂度为O(sqrt(p)) POJ2417Discrete Lo...

zdyyzdyy123的博客 472

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Baby-step giant-step算法

写在前面:   学习笔记,方便复习,学习资料来自网络,注明出处 我们都在努力奔跑,我们都是追梦人 结论   Ingroup theory, a branch of mathematics, thebaby-step giant-stepis ameet-in-the-middlealgorithmfor computing thediscr...

413

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Baby_Step_Giant_Step

Baby_Step_Giant_Step //求解的是a^x = b(mod c)的最小x解 struct node { int num; int val; } baby[maxn]; bool cmp(node a, node b) { if (a.val != b.val) return a.val < b.val; return a.num < b.num

acm2016 482

【数学】Baby Step,Giant Step

给定整数 a,b,pa,b,pa,b,p 且 a,pa,pa,p 互质,请求出高次同余方程 ax≡b(modp)a^x\equiv b\pmod pax≡b(modp) 的非负整数解. 首先, a0≡1(modp)a^0\equiv 1\pmod pa0≡1(modp) 又由欧拉定理知 aφ(p)≡1(modp)a^{\varphi(p)}\equiv 1\pmod paφ(p)≡1(modp) 所以出现了周期. 所以 xxx 在区间 [0,φ(p))[0,\varphi(p))[0,φ(p)) 中一定有,

mango09の世界 268

poj2417(Discrete Logging)-Baby Step Giant Step

题目链接:Discrete Logging 题意: ,给你P(P为素数),B,N,让你求满足条件的最小的L,无解输出 no solution. 思路: ,求满足条件的最小x,若p为素数,可用Baby Step Giant Step算法 令m = sqrt(n), 则,先预处理出,存入haxi(hash)表里, ,,枚举i,看a^j是否在hash表中,如果找到了,就输

Coder__Yang的博客 418

高次同余方程(Baby-Step Giant-Step)

Discrete LogarithmProblem  网页链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121425#problem/D 传送门:nefu 题目描述: 题目大意: 模板题,a^x=b(mod p) p为素数和不是素数都可以 代码实现: #include #include #

而濡木染 812

hdu——2815(数论之Baby Step Giant Step解决离散对数问题)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2815 可借鉴地址:http://blog.youkuaiyun.com/acm_cxlove/article/details/7832197 小结:可以说的上是个模板题。 #include #include #include #include #include #include using na

luoshenzhisi 1318

POJ-2417 Baby-Step Giant-Step

Description Given a prime P, 2 <= P < 2 ^ 31, an integer B, 2 <= B < P, and an integer N, 1 <= N < P, compute the discrete logarithm of N, base B, modulo P. That is, find an integer ...

刷题记录 282

poj2417(Baby-Step Giant-Step)

题目链接:http://poj.org/problem?id=2417 题意:求满足给出 P, N, B, 求满足条件 BL == N (mod P) 的最小 L, 若不存在则输出 no solution. 思路:Baby-Step Giant-Step 算法 设 L = kt − m,其中 t = ⌊sqrt(L)⌋, 0 <= m < t.那么 B^L = N (...

weixin_30352191的博客 192

POJ 2417 Discrete Logging (Baby Step Giant Step算法)

题目:LINK

Napoleon 972

P2485 [SDOI2011] 费马小定理 + Baby Step, Giant Step

题意 传送门 P2485 [SDOI2011]计算器 题解 ppp 为质数,若 y,py,py,p 不互质,那么有 p∣yp|yp∣y,特判此类情况。之后讨论 y,py,py,p 互质的情况。 考虑任务一,计算 yzmod  py^z\mod pyzmodp,快速幂求解即可。 考虑任务二,计算满足 xy≡zmod  pxy\equiv z\mod pxy≡zmodp 的最小非负整数 xxx。由于 y,py,py,p 互质,则 yyy 存在模 ppp 意义下的逆元,根据费马小定理,y−1=yp−2mod  p

neweryyy的博客 121

Baby-step Giant-step 算法详解

离散对数问题是现代密码学的基石之一,它可以描述为:给定素数 p、生成元 g 和 y,求整数 x 使得 g^x≡y(modp)这个问题被认为是计算困难的,但当群的阶较小时,我们可以用算法高效求解。Baby-step Giant-step是求解离散对数的经典算法,在CTF中经常出现。掌握它不仅能解决基础题,还能理解更复杂的攻击如Pohlig-Hellman和Pollard's ρ算法。j%7D。

wangzihan6726的博客 209
上一篇: 整除分块入门
下一篇: SP2901 GEOPROB - One Geometry Problem 题解
.SAI.
博客等级 码龄5年 835粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值