\(BSGS\) 算法,又称 “北(\(B\))上(\(S\))广(\(G\))深(\(S\))” 算法,“拔山盖世”算法,可以在 \(O(\sqrt{n})\) 的复杂度内求解离散对数问题。


题目描述:

给定质数 \(p\) 和整数 \(a, n\),求最小的非负整数 \(m\) ,满足 \(a^m \equiv n(mod\ \ p)\) 。

算法分析:

最暴力的算法就是每句每一个 \(m \in [1, p]\) ,看一下有没有一个 \(m\) 满足。时间复杂度 \(O(p)\) 。

因此就需要使用 \(\texttt{BSGS}\) 算法来求解 。

\(\texttt{BSGS}\) 算法的流程如下:

  1. 将原式做如下操作:
\[a ^ m \equiv n(mod \ \ p)
\]
\[a ^ {k \left \lfloor\sqrt{p}\right\rfloor - b} \equiv n (mod \ \ p)
\]
\[a ^ {k \left \lfloor\sqrt{p}\right\rfloor} \equiv n \times a ^ b(mod \ \ p)
\]
  1. 易得 \(k \leq \sqrt{q}\),\(b \leq \sqrt{q}\)。

  2. 我们枚举每一个 \(k\) ,将 \(a ^ {k \left \lfloor\sqrt{p}\right\rfloor}\) 的值存到一个 \(hash\) 里面,然后在枚举 \(b\),判断 \(hash\) 中是否存在即可。

时间复杂度 \(O(\sqrt{q})\)。

Baby_Step_Gaint_Step(BSGS) 算法的更多相关文章

  1. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  2. bzoj2242: [SDOI2011]计算器 && BSGS 算法

    BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...

  3. [BSGS算法]纯水斐波那契数列

    学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...

  4. BSGS算法

    BSGS算法 我是看着\(ppl\)的博客学的,您可以先访问\(ppl\)的博客 Part1 BSGS算法 求解关于\(x\)的方程 \[y^x=z(mod\ p)\] 其中\((y,p)=1\) 做 ...

  5. BSGS算法及扩展

    BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y ...

  6. uva11916 bsgs算法逆元模板,求逆元,组合计数

    其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方 ...

  7. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

  8. BSGS算法学习笔记

    从这里开始 离散对数和BSGS算法 扩展BSGS算法 离散对数和BSGS算法 设$x$是最小的非负整数使得$a^{x}\equiv b\ \ \ \pmod{m}$,则$x$是$b$以$a$为底的离散 ...

  9. bsgs算法详解

    例题  poj 2417bsgs  http://poj.org/problem?id=2417 这是一道bsgs题目,用bsgs算法,又称大小步(baby step giant step)算法,或者 ...

  10. BSGS算法总结

    BSGS算法总结 \(BSGS\)算法(Baby Step Giant Step),即大步小步算法,用于解决这样一个问题: 求\(y^x\equiv z\ (mod\ p)\)的最小正整数解. 前提条 ...

随机推荐

  1. 低代码引擎 TinyEngine 正式发布!

    在当今数字化飞速发展的时代,企业对高效.敏捷的应用程序需求日益旺盛.为了满足这一需求,越来越多的低代码开发平台开始涌现.这些平台通过提供简单易用的开发工具和优化后的开发流程,帮助开发者快速构建高质量. ...

  2. Insert a scratch project into a ppt (MSPowerPoinT file)在powerpoint中播放Scratch动画

    Insert a scratch project into a ppt (MSPowerPoinT file)在powerpoint中播放Scratch动画 Contributed by liu pe ...

  3. 【Unity3D】动态路径特效

    1 前言 ​ 本文通过导航系统(NavMeshAgent)和线段渲染器(LineRenderer)实现了角色走迷宫和绘制路径功能,同时实现动态路径特效. ​ 导航系统的介绍详见博客:导航系统.分离路面 ...

  4. Mac OS安装Python的pip

    最近牛牛的同学在学习python,但当他使用numpy时出现了报错(。•́︿•̀。) 原因为他的python没有numpy这个库(这个故事很典).然鹅雪上加霜的是,他的电脑是Mac,没有Windows ...

  5. 用xshell连接vmware虚拟机

    主要是为了方便写命令,我的vmware不管怎样都没办法粘贴命令,写建表sql更是折磨. 开启虚拟机用ifconfig查看内网ip地址. 然后在用户身份验证填用户名和密码. 连接成功. 这样就可以开多个 ...

  6. Dynamics CRM中自定义页面实现附件管理包含下载模板、上传、下载、删除

    前言 附件使用的Dynamics CRM平台本身的注释表annotation存储,将附件转换成二进制字节流保存到数据库中,因自带的注释在页面中显示附件不够直观,特做了一个单独的附件管理自定义页面,通过 ...

  7. Unity - UIWidgets 1. 从Hello world开始

    安装参照github的README.UIWidgets相当于Flutter的一个Unity实现(后面表示UIWidgets和UGUI区别时直接称"Flutter"),是把承载的所有 ...

  8. k 分算法是 k 越大越好吗?

    引入 我们有二分算法,就是: 定义 二分查找(英语:binary search),也称折半搜索(英语:half-interval search).对数搜索(英语:logarithmic search) ...

  9. K8S 组合命令

    强制删除namespace kubectl get namespace [namespace-name] -o json | tr -d "\n" | sed "s/\& ...

  10. HTML5的重要内容-1

    HTML学习笔记-1 (一):first-child和:first-of-type :first-child第一个元素 :first-of-type第一个某种类型元素 (二):only-child和: ...