BSGS
作者:
DoIdo
,
2020-02-21 10:45:46
,
所有人可见
,
阅读 636
引理:
/*
a ^ x == b (mod p) p 为素数
求得 x 的循环节的最大值为: p - 1
证明:
1, 费马小定理: a ^ (p - 1) == 1 (mod p) p 为素数
2, a ^ 0 == 1 (mod p)
-->
x 的最大循环节为 p - 1
例:
1, a == 2, p == 3
(1 2) (1 2) (1 2) (循环节为 2 )
2, a == 2, p == 5
(1 2 4 3) (1 2 4 3) (1 2 4 3) (循环节为 4 )
3, a == 2, p == 11
(1 2 4 8 5 10 9 7 3 6) (1 2 4 8 5 10 9 7 3 6) (1 2 4 8 5 10 9 7 3 6) (循环节为 10 )
4, a == 3, p == 5
(1 3 4 2) (1 3 4 2) (1 3 4 2) (循环节为 4 )
......
*/
重点:
/*
BSGS (求解的问题: a ^ x == b (mod p)) p 与 x 互质
推导过程:
a ^ x == b (mod p)
有引理可知-->
x 对任意循环节加一取模运算, 其结果不变
-->
a ^ x (mod p) == b (mod p) p 为素数
令 y == x (mod p) (y >= 0 && y <= p - 1)
a ^ y == b (mod p)
k, j 的范围由 y 的范围推导
设 m == sart(p), y == k * m - j (k >= 1 && k <= m) (j >= 0 && j < m)
-->
a ^ (k * m - j) == b (mod p)
-->
a ^ (k * m) == b * (a ^ j) (mod p)
-->
右边枚举 j, 存表
左边枚举 k, 查表
over ! ! !
*/