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 代码 之前写了一 ...
随机推荐
- (转) 理解Angular中的$apply()以及$digest()
原文地址:http://blog.csdn.net/dm_vincent/article/details/38705099 $apply()和$digest()在AngularJS中是两个核心概念,但 ...
- [转]关于PreparedStatement.addBatch()方法
Statement和PreparedStatement的区别就不多废话了,直接说PreparedStatement最重要的addbatch()结构的使用. 1.建立链接,(打电话拨号 ) Connec ...
- SOAPUI参数中xml中CDATA包含问题
<![CDATA[ <Request> <CardNo>000002629518</CardNo> <SecrityNo/> <BankTr ...
- 不会Python开发的运维终将被淘汰?
Python语言是一种面向对象.直译式计算机程序设计语言,由Guido van Rossum于1989年底发明.Python语法简捷而清晰,具有丰富和强大的类库,具有可扩展性和可嵌入性,是现代比较流行 ...
- QML和JS引擎的关系以及调用c++函数的原理
首先推荐几篇博客 1.深入解析QML引擎, 第1部分:QML文件加载 https://www.cnblogs.com/wzxNote/p/10569535.html 2.深入解析QML引擎, 第2部分 ...
- css控制字体线使用:text-decoration
css控制字体下划线使用text-decoration : text-decoration:none 无装饰,通常对html下划线标签去掉下划线样式 text-decoration:underline ...
- Phaser3跟随自定义路径移动的赛车 -- iFIERO游戏教程
racingcar 在线预览:http://www.ifiero.com/uploads/phaser/pathrotate/代码: var config = { type: Phaser.AUT ...
- html js 全选 反选 全不选源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Debian 9 + Windows 10 双系统安装体验
很久之前就想在自己的电脑上也装个 Debian 玩玩了,最近正好有时间折腾,就踩了踩坑在笔记本上装了玩玩~ UEFI + GPT 解决启动相关的麻烦配置 如果在支持 UEFI 的电脑上安装 Debia ...
- 使用Node.js 搭建http服务器 http-server 模块
1. 安装 http-server 模块 npm install http-server -g 全局安装 2.在需要的文件夹 启动 http-server 默认的端口是8080 可以使 ...