BSGS和扩展BSGS
BSGS:
求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\)
先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\)
然后把这些都存在map里 : \(map[a^x] = x\)
一个合法的x满足\(x = k\sqrt{p} + l\)使得\(a^x = b\),因此可以直接枚举k,于是有:
\[a^x = a^{k\sqrt{p}} \cdot a^l = b\]
\[a^l = \frac{b}{a^{k\sqrt{p}}} = b \cdot (a^{k\sqrt{p}})^{-1}\]
所以每次枚举k,如果可以在map内部找到\(b \cdot (a^{k\sqrt{p}})^{-1}\),那么就找到了一组合法的\(k\)和\(l\),于是就找到了一个合法解
扩展BSGS:
但是注意到在算法中,需要求\((a^{k\sqrt{p}})^{-1}\),并且我们有\((a^{t}) ^ {-1} = (a^{-1})^{t}\)
因此为了保证逆元存在,我们需要保证\(gcd(a, p) == 1\).
但对于\(p\)不为素数的情况,并不一定可以保证\(gcd(a, p) == 1\),因此需要用到扩展BSGS。
前置知识:\(A \equiv B (mod \quad C) \Longleftrightarrow \frac{A}{d} \equiv \frac{B}{d} (mod \quad \frac{C}{d})\)
假设现在有:\(A^{x} \equiv B (mod \quad C)\)
设\(d = gcd(A, C)\),则\(A = ad, B = bd, C = cd\)。
因为:\(A^{x} = kC + B \Longleftrightarrow d | A^{x}, \quad d | kC, \quad d | (kC + B) \Longrightarrow d | B\)
因此原式为:
\[(ad)^{x} \equiv bd (mod \quad cd)\]
\[a^{x}d^{x} \equiv bd (mod \quad cd)\]
\[a \cdot a^{x - 1}d^{x - 1} \equiv b (mod \quad c)\]
我们可以一直进行如上变换,直到\(gcd(a, c) == 1\),
假设我们现在进行了k次形如上式的变换,则当前式为:
\[\prod_{i = 1}^ {k}a_{i} \cdot A^{x - k} \equiv \frac{B}{\prod_{i = 1}^{k}d_{i}} (mod \quad \frac{C}{\prod_{i = 1}^{k}d_{i}})\]
其中\(a_{i} = \frac{A}{d_{i}}\),因为每次\(d_{i}\)不一定相同,所以每次\(a_{i}\),也不一定相同。
移项,把除法改成逆元:
\[A^{x - k} \equiv B \cdot (\prod_{i = 1}^{k}d_{i})^{-1} \cdot (\prod_{i = 1}^{k}a_{i})^{-1} \quad (mod C \quad \cdot (\prod_{i = 1}^{k}d_{i})^ {-1})\]
然后把\(B \cdot (\prod_{i = 1}^{k}d_{i})^{-1} \cdot (\prod_{i = 1}^{k}a_{i})^{-1}\)算出来,当做新的\(B\),做BSGS.
BSGS和扩展BSGS的更多相关文章
- BSGS与扩展BSGS
BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- BSGS及扩展BSGS算法及例题
\(BSGS(baby-step-giant-step)\)算法是用来解高次同余方程的最小非负整数解的算法,即形如这个的方程: \(a^x\equiv b(mod\ p)\) 其中\(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因子,然后将问题转化为子问题. /*** ...
- 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及其扩展
目录 定义 原理 朴素算法 数论分块 例题 Luogu2485 [SDOI2011]计算器 题解 代码 扩展 例题 Luogu4195 [模板]exBSGS/Spoj3105 Mod 代码 之前写了一 ...
随机推荐
- Jmeter接口测试(三)接口测试实践
Jmeter 脚本编写一般分五个步骤: 1. 添加线程组 2. 添加 http 请求 3. 在 http 请求中写入接入 url.路径.请求方式和参数 4. 添加查看结果树 5. 调用接口.查看返回值 ...
- AWS探索及创建一个aws EC2实例
一.AWS登陆 1.百度搜索aws,或者浏览器输入:http://aws.amazon.com 2.输入账户及密码登陆(注册流程按照提示走即可) 二.创建EC2实例(相当于阿里云的ecs) 1.找到E ...
- HDU 5170 GTY's math problem 水题
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5170 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- map的默认排序和自定义排序
STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N). 一般而言,使用map的时候直接采取map<typen ...
- virtual judge 本地部署方案
这是一种将自己的电脑当作服务器来部署一个vj的方法,我也是参考前辈们的做法稍作了改动,如果在服务器上部署的话需要在细节上稍作改动: 一.什么是Virtual Judge? vj的工作原理什么? vj ...
- 用C++实现简单随机二元四则运算
让我们想看看二元四则运算都需要实现什么: (1) 定制题目数量 (2) 是否有乘除法 (3) 题目数值范围 (4) 加减有无负数 (5) 除法有无余数 (6) 是否支持分数(真分数.假分数…) (7) ...
- iOS-封装UIPickerView
创建类WJPickerView继承与UIView ProvinceModel是省市的model,包含属性 @property (nonatomic, strong) NSString *provinc ...
- div跟随鼠标移动
1.目标是实现div跟随鼠标而移动,分三种情况进行实现 a)首先获取div,进行绑定鼠标移动事件,给div开启定位功能 第一种实现方式,假如body的大小跟页面大小一样,则可以用这个方法. 1)获取鼠 ...
- PAT 甲级 1081 Rational Sum (数据不严谨 点名批评)
https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880 Given N rational numbe ...
- Eureka服务注册过程
上篇博客<SpringCloud--Eureka服务注册和发现>介绍了Eureka的基本功能,这篇我们来聊聊eureka是如何实现的. 上图是eureka的架构图,Eureka分为Serv ...