[BSGS]大步小步算法】的更多相关文章

问题 BSGS被用于求解离散对数,即同余方程: \[ A^x\equiv B\pmod{P} \] 求\(x\)的最小非负整数解. 保证\(A\perp P\)(互质). 分析 首先,我们根据费马小定理,有 \[ A^{P-1}\equiv 1\pmod{P} \] 则显然有 \[ A^{x-k(P-1)}\equiv A^x\pmod{P} \] 即 \[ A^{x\mod{P-1}}\equiv A^x\pmod{P} \] 那么显然\(x<P-1\),我们就得到了一个\(O(P)\)的算法…
大步小步算法用于解决:已知A, B, C,求X使得 A^x = B (mod C) 成立. 我们令x = im - j | m = ceil(sqrt(C)), i = [1, m], j = [0, m] 那么原式就变成了: A^(im) = A^j * B 我们先枚举j,把A^j * B加入哈希表 然后枚举i,在表中查照A^(i*m),如果找到了,那么就找到了一个解. 算法的复杂度为O(n^0.5) 代码: #include <bits/stdc++.h> #define ll long…
离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗​而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗​内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解,并将解记作x=logabx=log_{a}{b}x=loga​b,离散对数指的就是这个logablog_{a}{b}loga​b.由于群Zp∗Z_{p}^{*}Zp∗​的阶是p−1p-1p−1,且是循环群,因为生成元的阶是p−1p-1p−1,因而模p−1p-1p−1相等的指数可以看做一样的数,x=l…
bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由费马小定理可知,只需要验证0,1,2...n-1是不是解即可,因为an-1 = 1mod(n) 算法过程 1.首先求出a0,a1,a2,...,am-1 模上n的值是否为b,存储在e[i]中,求出am的逆a-m 2.下面考虑am,am+1,...,a2m-1 模上n的值是否为b 此时不用一一检查,如…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线代算法我也不想多说,还是自行百度吧 需要注意的是矩阵没有交换律,所以在计算$B\cdot A^{-m}$的时候不要把顺序搞混 代码: #include <cstring> #include <cstdio> #include <algorithm> #include <…
大步小步模板 (hash稍微有一点麻烦, poj不支持C++11略坑) #include <iostream> #include <vector> #include <cstring> #include <cstdio> #include <cmath> #include <map> #define pb push_back #define fi first #define se second #define mk make_pair…
计算\(y^x ≡ z \ mod\ p\) 中 \(x\) 的解. 这个模板是最小化了\(x\) , 无解输出\(No \ Solution!\) map<ll,ll>data; ll m,res,t,ans; bool flag; Pow(int x,int y,int p){return (x^y)%p;} IL void BSGS(RG ll y , RG ll z,RG ll p){ y %=p; flag = false; if(!y && !z){puts(&qu…
本文原载于:http://www.orchidany.cf/2019/02/06/BSGS-junior/#more \(\rm{0x01}\) \(\mathcal{Preface}\) \(\rm{BSGS}(Baby~Step~Giant~Step)\), 大步小步法.当然也会被叫做拔山盖世.北上广深算法--咳,这并不重要.形式化地讲, \(\rm{BSGS}\)算法主要用来解决以下问题 : 给定质数\(p\), 整数\(a, b\), \((a, p)=1\).求最小的非负整数\(x\)…
https://www.luogu.org/problemnew/show/P4861 把好像把一开始b==1的特判去掉就可以AC了. #include<bits/stdc++.h> using namespace std; typedef long long ll; inline int gcd(int a,int b){ if(!b) return a; else{ while(int i=a%b){ a=b; b=i; } return b; } } inline int qpow(ll…
用途: 一般用来求\(a^x\equiv b\,\,(mod\,p)\)的最小正整数解,其中gcd(a,p)=1 设\(u=\lceil sqrt(p)\rceil\),则式子可以转化为\(a^{iu-j}\equiv b\,\,(mod\,p)\),其中\(i\in[1,u],j\in[0,u)\) 于是\(a^{iu}\equiv a^jb\,\,(mod\,p)\),我们就可以枚举j,存到map中,再枚举i判重就行了 不过当存在不同的j使\(a^jb\,mod\,p\)相同时,我们记录较大…
LRJ白书上的题 #include <stdio.h> #include <iostream> #include <vector> #include <math.h> #include <set> #include <map> #include <queue> #include <algorithm> #include <string.h> #include <string> using…
#include<cstdio> #include<algorithm> #include<cmath> #include<map> using namespace std; typedef long long ll; ll p,a,b; ll ksm(ll x,ll y) { ll res=1; while(y) { if(y&1)res=res*x%p; y>>=1; x=x*x%p; } return res; } map<l…
大步小步走算法处理这样的问题: A^x = B (mod C) 求满足条件的最小的x(可能无解) 其中,A/B/C都可以是很大的数(long long以内) 先分类考虑一下: 当(A,C)==1 即A.C互质的时候, 叫他BSGS: A一定存在mod C意义下的逆元,所以,A^k也存在. 注意到,A^(fai(c)) = 1 (mod c)  ......................(fai(c)表示c的欧拉函数值) 所以,A^(fai(c)+1) = A (mod C) 就重新回去了. 所…
传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a=p=b=0时,表示测试数据读入完全. 输出格式: 对于每组数据,输出一行. 如果无解,输出"No Solution"(不含引号),否则输出最小自然数解. 输入输出样例 输入样例#1: 5 58 33 2 4 3 0 0 0 输出样例#1: 9 No Solution 说明 100%的数据…
$BSGS$ 算法 $Baby\ Steps\ Giant\ Steps$. 致力于解决给定两个互质的数 $a,\ p$ 求一个最小的非负整数 $x$ 使得 $a^x\equiv b(mod\ p)$ 其中 $b$ 为任意正整数,$2≤a<p$,$2≤b<p$ 该算法使用的原理与欧拉定理有关,其中$a,\ p$互质 $a^{\phi (p)}\equiv 1(mod\ p)$ 又因为 $a^0\equiv 1(mod\ p)$ 所以$0到\phi p$是一个循环节,也就是说该算法最多查找$\p…
求一个 的最小整数解 bsgs 当h是质数的时候使用 extbsgs 不满足上面那种情况的时候 具体参见http://tonyfang.is-programmer.com/posts/178997.html ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } ll bsgs(ll A,ll B,ll C) { ll m,v,e=,i; m=ceil(sqrt(C)); map<ll,ll> hash; hash[]=m; ;i<m;++i) { e=…
就是求Ax三B(mod C)当C为素数时 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef long long LL; << ) - ) * + ; int A, B, C; struct Hashmap //哈希表代替map { , maxe = ; ], nxt[maxe + ], w[maxe…
知识概述 好吧,我承认这是我初三寒假就听过的知识,然而我现在早就高一了(又是寒假,只不过我已经在省选了...) 额,这是求离散模对数的一种算法 也就是求满足方程a^x≡b(mod p)的最小的x(其中p为质数) 考虑将x分块?,根据欧拉定理,只需检查x=0,1,2...p-1是否是解即可,因为a^(p-1)≡1(mod p)当x超过p-1时就开始循环了哦 假设块的大小为m 先检查前m项,a^0,a^1,a^2...a^(m-1)是否满足要求,把ai mod p存在hash表ei里,求出a^m的逆…
BSGS 引入 求解关于\(X\)的方程, \[A^X\equiv B \pmod P \] 其中\(Gcd(A,P)=1\) 求解 我们令\(X=i*\sqrt{P}-j\),其中\(0<=i,j<=\sqrt{P}\) 则原式可以变为: \[A^X\equiv B \pmod P \] \[A^{i*\sqrt{P}-j}\equiv B \pmod P \] 由于\(Gcd(A,P)=1\),则可以恒等变化为: \[A^{i*\sqrt{P}}\equiv B*A^j \pmod P \…
题目描述有以下几个问题:1 给定正整数  求方程  的最小非负整数解.2 给定正整数 求方程 的最小非负整数解.3 给定正整数 求方程  在模  意义下解的数量.4 给定正整数 求   的值.其中  是欧拉函数, 是莫比乌斯函数.输入格式输入文件共四行,按上述描述中四个问题的顺序,给出每个问题.第一行三个正整数   表示第一个问题,保证 .第二行三个正整数 表示第二个问题,保证  .第三行三个正整数  表示第三个问题,保证  为质数且  .第四行三个正整数 表示第四个问题.输出格式共四行每行一个…
原根&离散对数 1.原根 1.定义: 定义\(Ord_m(a)\)为使得\(a^d\equiv1\;(mod\;m)\)成立的最小的d(其中a和m互质) 由欧拉定理可知: \(Ord\le\Phi(m)\) 当\(Ord_m(a)=\Phi(m)时,称a是模m意义下m的一个原根\)(记住原根是a,不是d!) 2.原根的性质: 1.具有原根的数字仅有以下几种形式:\(2,4,p^n,2·p^n\)(p是奇质数) 2.一个数的最小原根的大小不超过 \(m^{\frac14}\) 3.若g是m的一个原…
Description Given a prime P, 2 <= P < 231, an integer B, 2 <= B < P, and an integer N, 1 <= N < P, compute the discrete logarithm of N, base B, modulo P. That is, find an integer L such that B L  == N (mod P) Input Read several lines of…
BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y,z,p>=1\)求解\(x\) 普通的\(BSGS\)只能用来解决\(gcd(y,p)=1\)的情况 设\(x=a*m+b, m=\lceil \sqrt p \rceil, a\in[0,m), b\in[0,m)\) 那么\(y^{a*m}=z*y^{-b} (mod\ p)\) 怎么求解,为…
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Robin+Pollard_Rho) 本文概要 1. 基础回顾 2. 中国剩余定理 (CRT) 及其扩展 3. 卢卡斯定理 (lucas) 及其扩展 4. 大步小步算法 (BSGS) 及其扩展 5. 原根与指标入…
BSGS算法总结 \(BSGS\)算法(Baby Step Giant Step),即大步小步算法,用于解决这样一个问题: 求\(y^x\equiv z\ (mod\ p)\)的最小正整数解. 前提条件是\((y,p)=1\). 我们选定一个大步长\(m=\sqrt p + 1\),设\(x=am+b\),那么显然有\(a,b\in[0,m)\).这样就有\(y^{am+b}\equiv z\ (mod\ p)\),就有\((y^m)^a=z*y^{-b}\ (mod\ p)\). 但是这个逆元…
BSGS算法(Baby Steps Giant Steps算法,大步小步算法,北上广深算法,拔山盖世算法) 适用问题 对于式子: $$x^y=z(mod_p)$$ 已知x,z,p,p为质数: 求解一个最小非负整数y: 存在一个y,属于[0,p-2](费马小定理) 于是有了一个笨拙的方法,枚举y 枚举y,期望效率:O(P) 寻求一种优化: 对式子变型: 设:$$y=i\sqrt{p}-j$$ 则$$x^{i\sqrt{p}-j}=z(mod_p)$$ ——这个变型的用意在于把y拆开 枚举y,变成枚…
BSGS (大步小步算法) 已知\(a.b. c\),求\(x\).令\(a^x \equiv b \pmod c\). 步骤 \[m = \lceil \sqrtc\ \rceil \]\[x = i*m-j\ \ (i\in[1, m], j\in[0, m])\]\[a^{i*m-j} \equiv b \pmod c\]\[a^{i*m}\equiv b*a^j \pmod c\] 枚举\(a^j(j\in[0, m])\)放入\(hash\)表里面,再枚举\(a^{i*m}\),在\(…
题意 给定 $a,b$ 和模数 $p$,求整数 $x$ 满足 $a^x \equiv  b(mod \ p)$,不保证 $a,p$ 互质. (好像是权限题,可见洛谷P4195 分析 之前讲过,可以通过设置 $x = km - r$ 而非 $x = km + r$ 避免求逆元,但是需要逆元存在,$a, p$ 互质的条件保证了这一点. 如果 $a, p$ 不互质怎么办呢? 我们想办法让他们变得互质. 具体地,设 $d_1 = gcd(a, p)$,如果 $d_1 \nmid b$,则原方程无解.否则…
一.引入: 若存在一个式子a^b ≡ c (mod p) (p ≡ 1000000007,且0<a,b,c<p) 已知a,b,求c.  这不就是快速幂嘛! 已知a,c,求b. 这就是我们需要研究的问题!用到了BSGS! 题目链接:poj 2417 bsgs 二.概念 BSGS: 又名大步小步算法.具体的我也不清楚啦~ 那么发明来做什么事情呢? 如上所述: 就是用来求解a^x ≡ b (mod p)这样的式子 PS:已知a,b,p 求最小x 三.做法 首先,我们将x用i*m-j来表示,其中我们的…
目录 定义 原理 朴素算法 数论分块 例题 Luogu2485 [SDOI2011]计算器 题解 代码 扩展 例题 Luogu4195 [模板]exBSGS/Spoj3105 Mod 代码 之前写了一篇关于BSGS的学习笔记.因为太过老旧,就想修改一些错误,顺便添上扩展BSGS的部分.可惜博客园不能对已发布的随笔修改编辑器,索性重新发出来.旧文已删. 定义 Baby-Step-Giant-Step算法,简称BSGS算法,又称大步小步算法,用于求方程\(a^x\equiv b(\text{mod…