EXBSGS算法
EXBSGS
$a^{x} \equiv b(\bmod p)$
BSGS只能求解p为素数的情况,EXBSGS可以完美解决这个问题,其基本思路就是通过转换,然后可以运用BSGS算法来求解,最终还是基于BSGS基础
EXBSGS
参考:https://www.cnblogs.com/TheRoadToTheGold/p/8478697.html
https://blog.csdn.net/a_bright_ch/article/details/83513731
https://www.cnblogs.com/lajioj/p/9529255.html
求解$a^{x} \equiv b(\bmod p)$(P不一定是质数)的最小非负正整数解
先放三个同余定理
- 定理1:
- 定理2:
- 定理3:
求解
如果b==1,那么x=0,算法结束
若gcd(a, p) != 1,令d=gcd(a, p),若d不能整除b,则无解,算法结束,否则继续
1
2例如当x=1,a=4,p=8,b=3时,代入公式有4 mod 8和3 mod 8,此时d = gcd(a, p) = 4,
说明a与p有因子为4,但是d不能整除b,说明b中没有共同因子,同样mod同一个数,没有共同因子,那么说明方程无解把一个a提取出来,$a^{x} \equiv b(\bmod p)$变成$a*a^{x-1} \equiv b(\bmod p)$
同时除以d得$a^{x-1} * \frac{a}{d} \equiv \frac{b}{d}\left(\bmod \frac{p}{d}\right)$
持续第三步除法,直到$\operatorname{gcd}\left(\mathrm{a}, \frac{p}{\prod{i-1}^{k} d{i}}\right)=1$
此时有$a^{x-k} * \frac{a^{k}}{\prod{i-1}^{k} d{i}} \equiv \frac{b}{\prod{i-1}^{k} d{i}}\left(\bmod \frac{p}{\prod{i-1}^{k} d{i}}\right)$
枚举 0<x<k,若有解,输出x,算法结束
对于x>=k
$a=a^{x-k}$, $b=\frac{b}{\prod{i-1}^{k} d{i}}$ , $p= \frac{p}{\prod{i-1}^{k} d{i}}$
A,P 互素
直接BSGS求$\frac{a^{k}}{\prod{i-1}^{k} d{i}}*a^{x} \equiv b ( \ mod\ p)$,所得结果+k即可
模板题http://poj.org/problem?id=3243
1 | /* |
1 | /* |