[Bsgs][ExBsgs]小结

tip.分解质因数可以只枚举到sqrt,剩下的如果不为1,则一定为某个质数的1次幂。

1、Bsgs(要求模数为质数)
用于求A^x同余B(mod C)的最小正整数x。
设m=ceil(sqrt(C)),关于为什么一定在这个范围内有解的证明我不会(逃)。

把x看成i*m-j。A^(i*m-j)同余B,对方程进行一些变换,得到A^i*m同余B*A^j.
然后枚举j从0到m,存到map里,值为j,再枚举i从1到m,检查map中是否存在A^i*m的数,存在的话答案就为i*m-map.

2、ExBsgs(用于解决Bsgs中模数不为质数)
因为模数不是质数了。所以无法把A^-j看成是/A^j(因为此时不互质所以不存在-1次幂)
所以考虑用一些办法使得A和C互质然后Bsgs。所以就不停的求Gcd,把A,B,C不停的除以Gcd,然后使得A,C互质。这里可以看出如果B不能整除Gcd的话方程则无解。
[Bsgs][ExBsgs]小结_第1张图片

最后将答案加上n就好了。

模板可以参考blog中另一篇文章。

你可能感兴趣的:(ExBsgs,Bsgs,数论)