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

大步小步算法用于解决:已知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…
BSGS算法 BSGS算法用于求解关于x的模方程\(A^x\equiv B\mod P\)(P为质数),相当于求模意义下的对数. 思想: 由费马小定理,\(A^{p-1}\equiv 1\mod P\),在p-1次方后开始循环,所以若原方程有解,\(x_{min}\in[0,P-1]\). 设\(x=i*m+j\),有\(A^{i*m+j}\equiv B\mod P\),移项得\({(A^m)}^i\equiv B*A^{-j}\mod P\),类似天天爱跑步,对于左右互不影响的等式可以开桶统…
离散对数及其拓展 离散对数是在群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…
大步小步模板 (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…
本文原载于: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\)…
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 <…
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}\),在\(…
其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方案%100000007的结果是R,现在给出R,N,K,请求出最小的M 对于第一行来说,每个位置有k种选择,那么填色方案数是k^n 对于第二行来说,每个位置有k-1中选择,那么填色方案数时(k-1)^n种 依次类推,如果i+1行的某个格子上面是白格,那么这个格子有k种填色方案 将M行分为两部分,第一部…
$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…