Processing math: 100%
6
12
2015
2

一个很多BSGS算法初学者的误区

感觉标题哪里怪怪的

以下内容难度偏易,相信很多人都知道,这里只是给不知道的人看的

其实就我不知道

 

很多人学BSGS都是从网上随便搜一个"baby step giant step",然后找到几个讲解来学(包括我),我一年前好像是看这个学的

 

似乎90%以上有关BSGS的讲解都是像这么说的:

 

ax=b(mod prime)

m=p,x=im+j

于是

aimaj=b(mod p)

aim=b(a1)j(mod p)

枚举j,存到hash表里,再枚举i,遇到的第一个就是答案

 

但是这里有一个重要的问题许多人都没有注意到,我以前看到的讲解也都没有注意到这个问题

那就是为什么需要求逆

liangjs今天跟我说他是看这里学的BSGS,根本不需要求逆

我们来思考一下为什么我们要令x=im+j而不是x=imj呢?

根本没有道理嘛

于是我们令

x=imj

于是

aim(a1)j=b(mod p)

aim=baj(mod p)

真的不需要求逆……

前几天n+e留言说4128只用hash就好了,我还以为是那种O(n2p)的做法……我果然太naive

也就是说这种写法BSGS适用于逆存在但是求逆比较麻烦的情况……嗯……比如说矩阵

各种意义上都能完虐需要逆元的BSGS

 

写这篇文章用来纪念自己一年都没有注意到的问题

 

没了

 

 

 

Category: OI | Tags: | Read Count: 2325
ydc 说:
2015年6月17日 21:53

简直可怕。为什么不能用来做扩展BSGS呢?

ydc 说:
2015年6月17日 21:53

@ydc: 尼玛我是逗逼……求帮忙删掉


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com