\(BSGS\)

求解\(a^x\equiv b\pmod p\),且\(a\)与\(p\)互质

由\(a^{φ(p)}\equiv1 \pmod p\)和\(a^0\equiv 1\pmod p\)得

\(0\simφ(p)\)为一个循环节,所以若在这个范围内不存在\(x\)满足方程,方程就无解

考虑分块,设\(x=im-k\),其中\(0\leqslant k\leqslant m\)

原方程变为\(a^{im-k}\equiv b\pmod p\)

两边同乘\(a^k\),\(a^{im}\equiv {a^kb}\pmod p\)

那么就可以先计算右边\({a^kb}\ mod\ p\)的值,放入一个\(hash\)表中,再计算左边\(a^{im}\ mod\ p\)的值,从小到大枚举所有可能的\(i\)值,再在\(hash\)表查询

当\(m\)取\(\sqrt p\)时复杂度最小,为\(O(\sqrt p)\)

同时注意\(m\)需要取\(\sqrt p+1\)或是\(ceil(\sqrt p)\)

\(code:\)

ll qp(ll x,ll y,ll m)
{
ll ans=1;
while(y)
{
if(y&1) ans=(ans*x)%m;
x=(x*x)%m;
y>>=1;
}
return ans%m;
}
map<ll,int> ha;
ll bsgs(ll a,ll b,ll p)
{
ll m=ceil(sqrt(p));
for(ll i=0,t=b;i<=m;++i,t=t*a%p) ha[t]=i;
for(ll i=1,tmp=qp(a,m,p),t=tmp;i<=m;++i,t=t*tmp%p)
if(ha[t])
return i*m-ha[t];
return -1;
}

\(exBSGS\)

求解\(a^x\equiv b\pmod p\),不保证\(a\)与\(p\)互质

设\(g=gcd(a,p)\)

带入得\(a^{x-1}\frac{a}{g}\equiv \frac{b}{g}\ (mod\ \frac{p}{g})\)

化简得\(a^{x-1}\equiv \frac{b}{g}×inv(\frac{a}{g})\ (mod\ \frac{p}{g})\)

像这样一直变换下去,当\(a\)与\(\frac{p}{g}\)互质时,即可求解

在变换过程中,当发现\(g\nmid b\)且\(b\ne 1\)时,原方程无解

当\(b=mul\)时说明此时\(a\)的次数为\(0\),这时返回变换次数\(cnt\)

\(code:\)

ll exgcd(ll a,ll b)
{
if(!b)
{
x=1,y=0;
return a;
}
ll ans=exgcd(b,a%b),tmp=x;
x=y,y=tmp-a/b*y;
return ans;
}
ll qp(ll x,ll y,ll m)
{
ll ans=1;
while(y)
{
if(y&1) ans=(ans*x)%m;
x=(x*x)%m;
y>>=1;
}
return ans%m;
}
ll inv(ll a,ll p)
{
exgcd(a,p);
return (x%p+p)%p;
}
unordered_map<ll,int> ha;
ll bsgs(ll a,ll b,ll p)
{
ha.clear();
ll m=ceil(sqrt(p));
for(ll i=0,t=b;i<=m;++i,t=t*a%p) ha[t]=i;
for(ll i=1,tmp=qp(a,m,p),t=tmp;i<=m;++i,t=t*tmp%p)
if(ha[t])
return i*m-ha[t];
return -1;
}
ll exbsgs(ll a,ll b,ll p)
{
if(b==1||p==1) return 0;
ll g,cnt=0,mul=1;
while((g=exgcd(a,p))!=1)
{
if(b%g!=0) return -1;
cnt++,b/=g,p/=g,mul=mul*(a/g)%p;
if(b==mul) return cnt;
}
ll ans=bsgs(a,b*inv(mul,p)%p,p);
if(~ans) return ans+cnt;
return -1;
}

扩展BSGS的更多相关文章

  1. BSGS与扩展BSGS

    BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...

  2. BSGS&扩展BSGS

    BSGS 给定\(a,b,p\),求\(x\)使得\(a^x\equiv b \pmod p\),或者说明不存在\(x\) 只能求\(\gcd(a,p)=1\)的情况 有一个结论:如果有解则必然存在\ ...

  3. POJ 3243 Clever Y 扩展BSGS

    http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...

  4. bzoj 3283 扩展BSGS + 快速阶乘

    T2  扩展BSGS T3 快速阶乘 给定整数n,质数p和正整数c,求整数s和b,满足n! / pb = s mod pc 考虑每次取出floor(n/p)个p因子,然后将问题转化为子问题. /*** ...

  5. BSGS和扩展BSGS

    BSGS: 求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\) 先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\) 然后把这些都存在map ...

  6. poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】

    扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...

  7. 扩展BSGS求解离散对数问题

    扩展BSGS用于求解axΞb mod(n) 同余方程中gcd(a,n)≠1的情况 基本思路,将原方程转化为a与n互质的情况后再套用普通的BSGS求解即可 const int maxint=((1< ...

  8. BSGS及扩展BSGS总结(BSGS,map)

    蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...

  9. bzoj 2480——扩展BSGS

    题意 给定 $a,b$ 和模数 $p$,求整数 $x$ 满足 $a^x \equiv  b(mod \ p)$,不保证 $a,p$ 互质. (好像是权限题,可见洛谷P4195 分析 之前讲过,可以通过 ...

  10. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

随机推荐

  1. 解决React Native安装应用到真机(红米3S)报Execution failed for task ':app:installDebug'的错误

    报错信息如下: :app:installDebug Installing APK 'app-debug.apk' on 'Redmi 3S - 6.0.1'Unable to install D:\R ...

  2. 新老单点的改造——-理解Cookie、Session、Token

    近期参与了新老单点的改造,一直想总结一下,发现这篇文章比较贴切. 整理了如下: 随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录 ...

  3. leetcode1028 从先序遍历还原二叉树 python 100%内存 一次遍历

    1028. 从先序遍历还原二叉树 python 100%内存 一次遍历     题目 我们从二叉树的根节点 root 开始进行深度优先搜索. 在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是 ...

  4. Mybatis学习笔记(1)

    CRUD操作 1.从实体类参数中取值 #{属性名} select * from user where username = #{username} 2.当sql语句只有一个参数且参数类型是基本类型或基 ...

  5. 九、深度优先 && 广度优先

    原文地址 一.什么是"搜索"算法? 算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于"图"这种数据结构的. 因为图这种数据结构的表达能 ...

  6. DOM-BOM-EVENT(3)

    3.Node常用属性 childNodes 获取所有子节点 <div id="wrap"> <div>1111</div> <div> ...

  7. linux之文件基本操作

    文件/目录管理命令: cd命令主要是改变目录的功能 cd ~ 返回登录目录 cd / 返回系统根目录 cd ../ 或者cd ..  返回上一级目录 cd -  返回上一次访问的目录 pwd命令用于显 ...

  8. html中doctype有几种类型 以及doctype的作用

    htm中doctype标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档. dotype 的特点: <!doct ...

  9. 大厂前端带来css3动画transition的使用和介绍全新认识动画

    CSS3中可以使用transition来做最简单动画效果,transition表示到一个元素的属性值发生变化时,我们可以看到页面元素从旧的属性慢慢变化为新的属性值的过程,这种效果不是立即变化的,而是体 ...

  10. ICPC 2018 亚洲横滨赛 C Emergency Evacuation(暴力,贪心)

    ICPC 2018 亚洲横滨赛 C Emergency Evacuation 题目大意 你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值 Solution 题目咋说就咋做 直接模拟 ...