Luogu P3846 BSGS算法】的更多相关文章

https://www.luogu.com.cn/problem/P3846 BSGS这个东西是用来干啥的? 形如下面这个式子: \[a^b = c\;(mod\;p) \] 其中:p是一个质数.\(2\leq a,b<p\leq2^{31}-1\) 求一个最小的正整数b,使得式子成立 首先,我们要知道一个东西.这个式子是有循环节的 根据费马小定理:p是质数,且a不是p的倍数时 有:\(a^{p-1}\equiv1\;(mod\;p)\) 而:\(a^0=1\) 因此答案是落在\([0,p-2]…
$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…
前置芝士: 1.快速幂(用于求一个数的幂次方) 2.STL里的map(快速查找) 详解 BSGS 算法适用于解决高次同余方程 \(a^x\equiv b (mod p)\) 由费马小定理可得 x <= p-1 我们设 \(m = sqrt(p)\) 至于为什么写,下文会讲到. 那么\(x\)就可以用 \(m\) 表示出来. 即 x = \(k \times m - j\) 移项可得 \(a^t \equiv b\times a^j\) 其中 t = \(k \times m\) 这也就是我们为什…
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ static const int mo=100007; int a[100010],v…
BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (mod p) 则 y^(j)≡z∗ine(y^(i*m)) (mod p)(逆元) 由费马小定理y^(p-1)≡1 (mod p) 得 ine(y^m) = y^(p-m-1)  ine(y^(i*m)≡ine(y^((i−1)m))∗y^(p-m-1) 1.首先枚举同余符号左面,用一个hash保存(…
学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只不过改成n<=10^30000000,并对给定p取模,0<p<2^31.一样很水嘛大家说对不对. 下面来简单介绍一下BSGS算法,BSGS(Baby steps and giant steps),又称包身工树大步小步法,听上去非常高端,其实就是一个暴力搜索.比如我们有一个方程,a^x≡b (…
BSGS算法 我是看着\(ppl\)的博客学的,您可以先访问\(ppl\)的博客 Part1 BSGS算法 求解关于\(x\)的方程 \[y^x=z(mod\ p)\] 其中\((y,p)=1\) 做法并不难,我们把\(x\)写成一个\(am-b\)的形式 那么,原式变成了 \(y^{am}=zy^b(mod\ p)\) 我们求出所有\(b\)可能的取值(0~m-1),并且计算右边的值 同时用哈希或者\(map\)之类的东西存起来,方便查询 对于左边,我们可以枚举所有可能的\(a\),然后直接查…
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)\) 怎么求解,为…
其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方案%100000007的结果是R,现在给出R,N,K,请求出最小的M 对于第一行来说,每个位置有k种选择,那么填色方案数是k^n 对于第二行来说,每个位置有k-1中选择,那么填色方案数时(k-1)^n种 依次类推,如果i+1行的某个格子上面是白格,那么这个格子有k种填色方案 将M行分为两部分,第一部…
bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以用\(bsgs\)在\(O(\sqrt n)\) 的复杂度内求出关于\(x\)的最小正整数解.(前提是\(p\)为质数) \(a^x\equiv b \mod p\) 我们可以知道如果我们的模数p是一个质数,我们将同余式的右边以逆元的形式乘到左边来,根据殴拉定理(因为p是质数,所以a,p互质)则我们…