离散对数
出处说明
本文内容摘自外部资源,为方便学员快速学习相关前置数学知识而整理在一起。内容可能较原文有删减,仅保留本课程所需的前置内容,以便学员快速掌握必备知识。
原文链接:https://oi-wiki.org/math/number-theory/discrete-logarithm/
引入
对数的本质是构建一个乘法运算到加法运算的映射。仿照复数中构建对数运算的办法,可以在模
多值函数
如果对于自变量,有多于一个的函数值与其对应,这样的函数称为 多值函数。
多值函数的函数值为集合,值域为函数值集合的集合。多值函数常常首字母大写,并规定一个对应首字母小写的单值函数称为 主值。
在复数中构建的对数运算是多值函数:
它的主值是:
在模
离散对数
对于模
则称
因为
如果使用对数的记号书写,则构成多值函数关系:
它的主值是:
规定主值
与复对数一致,离散对数拥有性质:
与复对数一致,离散对数的主值不满足该性质。事实上,把离散对数的结果看作对
因此,为了概念的介绍方便,不再试图去硬性区分多值函数和多值函数的主值这两个概念,而是将记号直接记为:
这里后面的模数由
换底公式
如果模
使用原根为底的原因也得到了解释:为了使得模
大步小步算法
BSGS(baby-step giant-step),即大步小步算法。常用于求解离散对数问题。形式化地说,该算法可以在
其中
算法描述
令
我们已知的是 hash
/map
存下来,然后逐一计算
注意到 map
则多一个
" 为什么要求
注意到我们求出的是
进阶篇
求解
其中
该模型可以通过一系列的转化为成 基础篇 中的模型,你可能需要了解关于 阶与原根 的知识。
由于式子中的模数
方法一
我们令
于是就转换成了我们熟知的 BSGS 的基本模型了,可以在
方法二
我们仍令
方程两边同时取离散对数得到
我们可以通过 BSGS 求解
找到所有解
在知道
于是得到所有解为
对于上面这个式子,显然有
这就是原问题的所有解。
扩展篇
接下来我们求解
其中
当
具体地,设
如果
同理,这样不停的判断下去。直到
记
由于
注意,不排除解小于等于