\(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. Java闭包概念

    闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...

  2. 深度解剖dubbo源码---01dubbo的架构原理-探索.mp4

    02内核解剖-dubbo自己的SPI实现.mp4 https://blog.csdn.net/prestigeding/article/details/80795708 https://segment ...

  3. TestNG配合catubuter统计单元测试的代码覆盖率

    build-testNG.xml对应的ant脚本为 <?xml version="1.0" encoding="UTF-8"?> <proje ...

  4. 【Vim命令】

    命令 操作 :set nu 显示行号  i 编辑模式  :wq  修改并退出  :%s/a/b  把所有的a替换成b                        

  5. Oracle中truncate表不更新last_ddl_time列

    Oracle中truncate表不更新last_ddl_time列 问题描述 最近发现数据库中定时job的某张表,每天都有truncate动作,由于调整了job的interval时间,想查看last_ ...

  6. JavaScript中数组去重的几种方法

    JavaScript中数组去重的几种方法 正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀.现在我总结了一些去重 ...

  7. 进阿里真的这么难?P8大佬告诉你,你和阿里之间缺的只是这份笔记

    一转眼今年已经到六月份了,在这个过去的半年里有人选择了安稳,有的人偏偏不... 最近小编就有个朋友,去面了个[P8 级架构师],也算是摸摸行情,为后面的一些安排提前做好规划~ 先给大家介绍一下我这个朋 ...

  8. Instrction Arrangement UDH 4109 拓扑排序 or 最长路

    题目描述 Ali has taken the Computer Organization and Architecture course this term. He learned that ther ...

  9. 11.unity3d 摄像机快速定位到Scene视角

    选中Camera,比如Main Camera摄像机,在菜单选择GameObject->Align With View就可以了.如下图所示,参照前三步操作,第4步是最终效果.

  10. CSS学习之选择器优先级与属性继承

    CSS学习之选择器优先级与属性继承 选择器优先级 其实选择器是具有优先级的,我们来看下面这一组案例: <!DOCTYPE html> <html lang="en" ...