1.引入

BSGS算法又名拔山盖世算法,也叫北上广深算法,也叫大步小步算法,总之就是名字很多了,但是实际上他就是一个解决同余方程 给定a,b,p,求最小的非负整数x,满足  ax ≡ b(mod p)。

2.过程

先令 x = i*m-j,其中 m=ceil(sqrt(p)),ceil是向上取整。

这样原式就变为     ai*m-j = b (mod p),

移项就变成了        ai*m = b*aj (mod p)

枚举j (范围0-m) ,将 b*aj  存入hash表。

枚举i (范围1-m) ,从hash表中寻找第一个满足ai*m = b*aj  (mod p)。

此时   x = i*m-j  就是所要求的。

3.原因:

先令 x = i*m-j,其中 m=ceil(sqrt(p)),ceil是向上取整。

这样原式就变为     ai*m-j = b (mod p),

移项就变成了        ai*m = b*aj (mod p)

枚举j (范围0-m) ,将 b*aj  存入hash表。

枚举i (范围1-m) ,从hash表中寻找第一个满足ai*m = b*aj  (mod p)。

此时   x = i*m-j  就是所要求的。

模板

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
#define ll long long
using namespace std;map<ll,int> mp;
ll pow(ll a,ll b,ll mod)
{ll ans=1;for(;b>0;b/=2){if(b%2==1)ans=(ans*a)%mod;a=a*a%mod;}return ans;
}int main()
{ll a,b,c;mp.clear();while(scanf("%lld%lld%lld",&c,&a,&b)!=EOF){if(a%c==0){printf("No solution\n");continue;}int flag=0;ll m=ceil(sqrt(c));ll ans;for(int i=0;i<=m;i++){if(i==0){ans=b%c;mp[ans]=i;continue;}ans=(ans*a)%c;mp[ans]=i;}ll cur=pow(a,m,c);ans=1;for(int i=0;i<=m;i++){ans=(ans*cur)%c;if(mp[ans]){int t=i*m-mp[ans];printf("%d\n",(t%c+c)%c);flag=1;break;}}if (!flag)printf("no solution\n");}return 0;
}

BSGS(拔山盖世算法),北上广深算法相关推荐

  1. 发布职位:魔门塔momenta# 3月c轮+5亿$=30亿$, 下半年c+轮+5亿$技术路线:激光雷达+摄像头+声波+高精地图+驾驶决策算法斯图加特北上广深苏CEO-曹旭东(微软、商

    发布职位:魔门塔momenta# 3月c轮+5亿$=30亿$, 下半年c+轮+5亿$ 技术路线:激光雷达+摄像头+声波+高精地图+驾驶决策算法 斯图加特北上广深苏 CEO-曹旭东(微软.商汤经历,清华 ...

  2. 2020就业形势报告:计算机相关行业仍是最热,人工智能聚集北上广深

      转载于 新智元   编辑:小智.元子 [导读]由于疫情的影响,2020年的就业形势将更加严峻.虽然整个招聘市场都在下行,但具体到IT行业来看,需求和平均薪资依旧是最高的,人工智能作为计算机专业的热 ...

  3. 北上广深房屋租赁数据分析

    房屋租赁信息 北上广深房屋租赁数据分析 一.数据预处理 二.描述性统计 2.1 区级租金箱线图 2.2 租金分布情况 2.3 北京各行政区租金分布 2.4 各城市租金分布对比图 2.5 北京各行政区租 ...

  4. Java程序员月薪2W除了北上广深杭,如何达到?需要什么掌握能力

    有人回答说月薪两万,这只能是大企业或者互联网企业的工程师才能拿到.也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该是已经转管理后才有可能.还有区域问题,这个不在我的考虑范围内,因为除了北 ...

  5. 北上广深的我们,快疯了的疯子……

    参考:九边的<复杂世界的明白人> 刚跟一小伙伴吃完散伙饭,就回来撸文章了.最近走了好几个长得比我帅的,心里是「真」难受啊-- 有准备动身回西安的,也有已经去了武汉.杭州.青岛.深圳.上海的 ...

  6. 发布职位:文远知行WeRide.ai#首家中美两地无人驾驶测试许可独角兽,6月份c轮=33亿$base:硅谷 北上广深鄂技术路线:激光雷达+摄像头+卫星+惯性导航+高精地图前端后端移动

    发布职位:文远知行WeRide.ai# 首家中美两地无人驾驶测试许可独角兽,6月份c轮=33亿$ base:硅谷 北上广深鄂 技术路线:激光雷达+摄像头+卫星+惯性导航+高精地图 前端后端移动端大数据 ...

  7. 用Python分析北上广深租房情况,租房时优先考虑哪些因素?

    俗话说"金三银四",又到了换工作.乃至换城市的时候了.这对于"回望楼价又一年"的小伙伴们来说,也意味着又到了搬家换房子的时候了.北上广深四个一线城市,哪个城市的 ...

  8. 太酷炫了,我用 Python 画出了北上广深的地铁路线动态图

    今天教大家用python制作北上广深--地铁线路动态图,这可能是全网最全最详细的教程了. 坐标点的采集 小五之前做过类似的地理可视化,不过都是使用网络上收集到的json数据.但很多数据其实是过时的,甚 ...

  9. 我为什么选择在北上广深打拼?

    一场疫情,打乱了所有人的计划.大疫之下,一场"逃离深圳"的风暴,突然席卷社交平台.一批又一批的深漂,正在转租,清退出租屋离开深圳.此外,逃离的,还有不少北漂...... 有人说,这 ...

最新文章

  1. 平滑无损!引入Elasticsearch的系统架构实战
  2. js 获取中文的拼音
  3. Java面向对象之构造方法
  4. 一步一步构建自己的管理系统①
  5. 一步一步写算法(之链表重合)
  6. 将Tomcat配置到你的mac电脑上,命令行启动tomcat
  7. Path Sum Path Sum II
  8. 在mysql中productname_ASP如何读出数据库里的英文符号.....%rs(ProductName)% 其是ProductName=10×26wood...
  9. ui-router 之 $state.go
  10. android 分区 加密软件,VeraCrypt(硬盘分区加密软件)
  11. android按钮显示注册成功,Android中给按钮注册事件的四种方法
  12. Oracle X$BH
  13. 债券交易的方式及流程
  14. 【概率论】2-1:条件概率(Conditional Probability)
  15. 我的暗影精灵BIOS做过的更改
  16. 【C语言常识】Keil MDK的分散加载文件.sct
  17. 期货如何展期(期货合约展期)
  18. JVM垃圾收集器(三)
  19. 干货:Hulu教你赴美工作怎么拿签证!
  20. kubernetes 五种核心资源对象简介

热门文章

  1. pip install 安装加速(修改为国内源)
  2. 谷歌小恐龙-有网也能玩儿
  3. IMPERVA- 系统导出
  4. Linux系统编程-信号入门2
  5. 通过浏览器打开本地exe应用(支持任意浏览器)
  6. HD2500显卡驱动linux,Intel HD Graphics 2500/4000驱动免费版
  7. android+sim卡软件,超级SIM卡APP
  8. 解决 rsync: failed to connect to xxx.xxx.xxx.85 (xxx.xxx.xxx.85): No route to host (113) 问题
  9. 5.1 OpenStack
  10. 信号与系统——典型的连续时间信号讲解