BSGS&ExBSGS
BSGS&ExBSGS
求解形如
\]
的高次同余方程
BSGS
假装\(gcd(a,p)=1\)。
设\(m=\lceil\sqrt p \rceil\)
然后把\(x\)分解成
\]
的形式。
\]
\]
\]
这时我们发现,\(1≤j≤m-1\),也就是说枚举\(j\)是非常简单的。
这样我们就可以把\(m-1\)个\(j\)全都存起来,存到哈希表中,然后枚举\(i\),这样就可以在\(O(\sqrt n + log (n))\)的时间内求出解了。(分块 + map)
(时间复杂度是wyh在网上找的,自己不会证qwq
ExBSGS
刚刚我们假装\(gcd(a,p)=1\),那要是没有这个条件怎么办呢?
很简单,我们只要通过把两边同时除以 他们的 gcd 就好啦qwq
设\(g=gcd(a,p)\),如果\(g\not| b\),显然如果\(p=1\)则\(x=0\),否则方程无解
我们就得到
\]
\]
这样一直做下去,直到\(g=1\)为止。
有一个误区(对于我这种蒟蒻)就是\(a\)和\(b/g\)不一定互质。这是zzy学长告诉wyh的qwq,还是学长好啊qwq。

好感动啊。。。
Code
typedef long long ll;
map<ll,ll> ma;
inline ll bsgs(ll a,ll b)//解a^x同余b (%mod)
{
a%=mod;b%=mod;
ma.clear();
ll m=ll(sqrt(mod+1)),e=1;
for(int j=0;j<m;++j)
{
if(!ma.count(e)) ma[e]=j;
e=e*a%mod;
}
if(gcd(e,mod)!=1) return -1;
ll inv=inverse(e);//逆元
for(int i=0;i<m;++i)
{
if(ma.count(b)) return i*m+ma[b];
b=b*inv%mod;
}
return -1;
}
BSGS&ExBSGS的更多相关文章
- BSGS&EXBSGS 大手拉小手,大步小步走
大步小步走算法处理这样的问题: A^x = B (mod C) 求满足条件的最小的x(可能无解) 其中,A/B/C都可以是很大的数(long long以内) 先分类考虑一下: 当(A,C)==1 即A ...
- [note]BSGS & exBSGS
BSGS (感觉这东西还是要写一下) BSGS主要用于求解形如\(x^k=y\pmod p\)(注意这里p与x互质)这样的方程的最小正整数解的问题 设\(m=\lceil\sqrt p\rceil,k ...
- 算法笔记--BSGS && exBSGS 模板
https://www.cnblogs.com/sdzwyq/p/9900650.html 模板: unordered_map<int, int> mp; LL q_pow(LL n, L ...
- BSGS && EXBSGS
基础BSGS 用处是什么呢w 大步小步发(Baby-Step-Giant-Step,简称BSGS),可以用来高效求解形如\(A^x≡B(mod C)\)(C为素数)的同余方程. 常用于求解离散对数问题 ...
- BSGS+exBSGS POJ2417+POJ3243
a^x=b(mod p)求x,利用分块的思想根号p的复杂度求答案,枚举同余式两端的变量,用hash的方法去找最小的答案(PS:hash看上去很像链式前向星就很有好感).然后如果p不是质数时,就利用同余 ...
- Noip前的大抱佛脚----数论
目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...
- 各种友(e)善(xin)数论总集(未完待续),从入门到绝望
目录 快速幂 扩展欧几里得 GCD 扩展欧几里得 同余系列 同余方程 同余方程组 一点想法 高次同余方程 BSGS exBSGS 线性筛素数 埃式筛 欧拉筛 欧拉函数 讲解 两道水题 法雷级数 可见点 ...
- REHの收藏列表
搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...
- ZROI 2019 暑期游记
ZROI 游记 在自闭中度过了17天 挖了无数坑,填了一点坑 所以还是有好多坑啊zblzbl 挖坑总集: 时间分治 差分约束 Prufer序列 容斥 树上数据结构 例题C (和后面的例题) 点分 最大 ...
随机推荐
- Python - unittest打印成功信息
参考 https://stackoverflow.com/questions/36834677/print-success-messages-for-asserts-in-python 总结 clas ...
- Go安装gRPC
grpc-go的官方安装命令 go get google.golang.org/grpc 无法正常使用. 我们可以用以下的命令替代,达到同样的效果 git clone https://github.c ...
- laravel API
/** * [api] * @author Foreach * @param string $method [请求方式] * @param string $url [地址] * @param arra ...
- 项目中常用的全局宏定义#define
一 关于屏幕大小 #pragma mark - 屏幕宽高 #define SCREEN_BOUNDS ([UIScreen mainScreen].bounds) #define SCREEN_WID ...
- 为小学生出四则运算题目.java
import java.util.Scanner; import java.util.Random; public class test{ public static int s1 = new Ran ...
- C++赋值操作符不能继承
在网上搜索相关资料时,看到有人说,赋值操作符可以被继承,并且给出了一个例子. 一时间,也没想出那个例子错在哪里. 例子代码如下: #include <iostream> using nam ...
- Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )
最近在开发一个基于Vue的后台管理系统,其中使用了element-ui第三方ui组件库.使用过组件库的人都知道,第三方组件往往会有一些默认的样式,而有些又是我们想要改变的. 一.基础(了解 <s ...
- [CEOI 2004]锯木厂选址
Description 题库链接 从山顶上到山底下沿着一条直线种植了 \(n\) 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个 ...
- 华为平板暴力禁用wifi
删除以下配置文件及动态链接库: /system/etc/wifi/* /system/etc/permission/*wifi* /system/lib/*wifi*
- 用instsrv.exe+srvany.exe将应用程序安装为windows服务
下载 链接:https://pan.baidu.com/s/1gKu_WwVo-TeWXmrGAr9qjw 提取码:s1vm 用instsrv.exe安装srvany.exe 将instsrv.exe ...