首页 > 编程语言 >BSGS算法学习小记(大步小步算法)

BSGS算法学习小记(大步小步算法)

时间:2022-12-26 18:37:10浏览次数:42  
标签:modp ni ll 枚举 算法 printf BSGS 小记


简介

先看一个式子xy≡z(modp),z是质数
现在只知道x和z,要求y。
大步小步算法(BSGS,Baby Steps Giant Steps)就是解决这个问题。

算法流程

暴搜的枚举范围

根据费马小定理:xp−1≡1。
如果y已经枚举到了p-1了,继续枚举的话就会产生循环。
所以,在暴搜中y的枚举范围就是0……p-1。

如何优化暴搜

我们想一想可不可以用分块来解决枚举的y。
把y分成p−1−−−−√分别枚举行不行?
设m=p−1−−−−√,y=a∗m+b,这样枚举a和b就相当于分块枚举了。
那么现在就变成了xa∗m+b≡z(modp)
把a和b分别放在两边:xb≡x−a∗mz(modp)
我们可以发现左边的xb最多只有m个,完全可以预处理出来放进hash里面。

ll m=ceil(sqrt(p-1));
ll ni=qsm(x,m);ni=qsm(ni,p-2);//因为右边的指数是复数,所以需要逆元
a.clear();
a[1]=m+1;
fo(j,1,m-1){
k=k*x%p;
if(!a[k])a[k]=j;
}

然后枚举右边的a就好了。

fo(i,0,m-1){
ll u=a[y];
if(u){
if(u==m+1)printf("%lld\n",i*m);
else printf("%lld\n",i*m+u);
return;
}
y=y*ni%p;
}
printf("Orz, I cannot find x!\n");

这就是O(p√)的用空间换取时间的大步小步算法。
很优美的暴搜。

推荐题目

经典的裸题​​SDOI2011 计算器​​

由于本人是个蒟蒻

对于BSGS算法知道的,也只有这么多了。


标签:modp,ni,ll,枚举,算法,printf,BSGS,小记
From: https://blog.51cto.com/u_15923198/5970003

相关文章

  • 决策树学习小记
    决策树类型ID3C4.5CART(回归树)优缺点优点:计算复杂度不高,输出易于理解,对缺失值不敏感,可以处理不相关特征数据缺点:可能会产生过度匹配问题,过拟合使用数据类型:数值型和布尔型......
  • CTC算法学习笔记
    CTC算法在OCR或语音识别任务中,经常出现不知道从哪里开始对齐比如对​​apple​​,OCR出aaappppllle这种东西如果只是简单的去重的话就变成了​​aple​​ConnectionistT......
  • 扩展KMP复习小记
    简介KMP大家都耳熟能详,扩展KMP只是一个扩展版而已,字面意思啦!我记得以前打过这个复习小记的,但是不知为何失踪了。KMP与扩展KMP的对比KMP的next[i]表示从1到i的字符串s,前缀......
  • 带修改的莫队算法学习小记
    简介莫涛大神创造出的离线询问算法的带修改版。算法基础:需要掌握​​莫队算法​​,会打暴搜(暴力)。一个叫莫的双端队列。只支持单点修改操作方法普通的不带修改的莫队算......
  • 小记Vue动态修改表头的方法
    背景:列表A:初始列名称列表对象B:{name1:newName1;name2:newName2}对象B记录了一部分需要修改的列名称。根据列表A使用v-for动态渲染......
  • 排序算法之稳定性
    介绍稳定性:2个相等的数,在排序前后的顺序不变,就说这个排序算法是稳定。好处从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。例子基......
  • 寒武纪招聘|智能驾驶类、算法类、软件类、芯片类等岗位(校招/社招)
    ......
  • 【电力系统】微电网两阶段鲁棒优化经济调度算法附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 特征提取算法的综合实验(多种角度比较sift/surf/brisk/orb/akze)
    一、基本概念:作用:特征点提取在“目标识别、图像拼接、运动跟踪、图像检索、自动定位”等研究中起着重要作用;主要算法:•FAST,​​Machine......
  • 创业周年记:召唤神龙一周年小记
    2018年8月8日,我决定离开腾讯的光环,辞职开始创业。《​​回顾4180天在腾讯使用C#的历程,开启新的征途​​》记录了我所说的拥有七龙珠,去召唤神龙,今天正好历时一年时间,非常有必......