扩展BSGS
\(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的更多相关文章
- BSGS与扩展BSGS
BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...
- BSGS&扩展BSGS
BSGS 给定\(a,b,p\),求\(x\)使得\(a^x\equiv b \pmod p\),或者说明不存在\(x\) 只能求\(\gcd(a,p)=1\)的情况 有一个结论:如果有解则必然存在\ ...
- POJ 3243 Clever Y 扩展BSGS
http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...
- bzoj 3283 扩展BSGS + 快速阶乘
T2 扩展BSGS T3 快速阶乘 给定整数n,质数p和正整数c,求整数s和b,满足n! / pb = s mod pc 考虑每次取出floor(n/p)个p因子,然后将问题转化为子问题. /*** ...
- BSGS和扩展BSGS
BSGS: 求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\) 先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\) 然后把这些都存在map ...
- poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】
扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...
- 扩展BSGS求解离散对数问题
扩展BSGS用于求解axΞb mod(n) 同余方程中gcd(a,n)≠1的情况 基本思路,将原方程转化为a与n互质的情况后再套用普通的BSGS求解即可 const int maxint=((1< ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- bzoj 2480——扩展BSGS
题意 给定 $a,b$ 和模数 $p$,求整数 $x$ 满足 $a^x \equiv b(mod \ p)$,不保证 $a,p$ 互质. (好像是权限题,可见洛谷P4195 分析 之前讲过,可以通过 ...
- bzoj 1467: Pku3243 clever Y 扩展BSGS
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...
随机推荐
- java之FTP上传下载
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- python3大特征之多态
1.什么是多态 多态指的是一类事物有多种形态 例如: 动物有多种形态: 人,狗,猪 在程序中多态指的是,不同对象可以响应相同方法,并可以有自己不同的实现方式 2.为什么需要多态 案例分析: impor ...
- Ajax实现文件上传(Spring MVC)
## 前端表单 和 JQuery jsp/html代码 使用JQuery <script src="static/js/jquery-3.4.1.js"></sc ...
- python黑帽子之udp客户端
将上文的TCP客户端简单修改便能得到UDP客户端 import socket target_host = "127.0.0.1" target_port = 80 client = ...
- 一种基于LQR使输出更加稳定的算法(超级实用)
已知: 令: 则: 以上三式成立 具体步骤: 状态量最后一行加入“上一时刻的控制量”: A,B根据上述方法变形: Q,R增加维度(控制量一般都为一个,此时R维度不变): 最关键的是——输出量已经变为“ ...
- oracle闪回,找回已提交修改的记录
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_24521431/article/details/84580166 例如删除ward_id为96 ...
- Passing Reference Data Type Arguments
public void moveCircle(Circle circle, int deltaX, int deltaY) { // code to move origin of circle to ...
- 关于WebServices的调用
1.使用soapui测试接口是否能通 具体操作步骤请查看:https://www.cnblogs.com/BINDAI/p/13201513.html Soapui请求结果集 2.获得soapu ...
- USACO07NOV Cow Relays G 题解
题目 For their physical fitness program, \(N (2 ≤ N ≤ 1,000,000)\) cows have decided to run a relay ra ...
- 洛谷 P1220 关路灯 区间DP
题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...