【问题标题】:Roots of a polynomial mod a prime多项式模素数的根
【发布时间】:2015-05-14 02:35:10
【问题描述】:

我正在寻找一种快速算法来在素数有限域中找到单变量多项式的根。

也就是说,如果f = a<sub>0</sub> + a<sub>1</sub>x + a<sub>2</sub>x<sup>2</sup> + ... + a<sub>n</sub>x<sup>n</sup> (n > 0),那么对于给定素数 p,找到所有满足f(r) = 0 mod pr &lt; p 的算法。

我找到了 Chiens 搜索算法 https://en.wikipedia.org/wiki/Chien_search,但我无法想象这对于大于 20 位的素数来说会那么快。有没有人对 Chien 的搜索算法有经验或知道更快的方法?有没有一个 sympy 模块呢?

【问题讨论】:

  • citeseerx.ist.psu.edu/viewdoc/… 指出在有限域上求解多项式是分解它们的一种特殊情况,并且有随机多项式时间算法用于在有限域上分解多项式(参见例如en.wikipedia.org/wiki/…)。它说它继续描述用于求根的确定性多项式时间算法,但我还没有读到那么远。

标签: algorithm sympy polynomial-math polynomials


【解决方案1】:

正如 mcdowella 的评论所表明的那样,这已经得到了很好的研究。以下是 Cantor-Zassenhaus random algorithm 在您想要找到多项式根的情况下的工作原理,而不是更一般的因式分解。

请注意,在系数为 p 的多项式环中,乘积 x(x-1)(x-2)...(x-p+1) 具有所有可能的根,并且等于 x^px 通过@ 987654322@ 和此环中的唯一因式分解。

设置 g = GCD(f,x^p-x)。使用Euclid's algorithm 来计算两个多项式的 GCD 通常很快,需要采取一些最大程度为对数的步骤。它不需要您对多项式进行因式分解。 g在域中与f同根,无重复因子。

由于 x^px 的特殊形式,只有两个非零项,欧几里得算法的第一步可以由repeated squaring 完成,大约 2 log_2 (p) 步,只涉及次数不超过两次的多项式f 的度数,系数为 p。我们可以计算 x mod f、x^2 mod f、x^4 mod f 等,然后将对应于 p 的二进制展开中非零位置的项相乘以计算 x^p mod f,最后减去 x。

重复执行以下操作:在 Z/p 中选择一个随机 d。用 r_d = (x+d)^((p-1)/2)-1 计算 g 的 GCD,我们可以再次通过欧几里得算法快速计算,在第一步使用重复平方。如果这个 GCD 的次数严格在 0 和 g 的次数之间,我们已经找到了 g 的一个非平凡因子,我们可以递归直到我们找到线性因子,从而找到 g 的根,从而找到 f。

这多久有效一次? r_d 将 d 小于非零平方 mod p 的数字作为根。考虑 g 的两个不同的根,a 和 b,因此 (x-a) 和 (x-b) 是 g 的因子。如果 a+d 是非零平方,而 b+d 不是,则 (xa) 是 g 和 r_d 的公因数,而 (xb) 不是,这意味着 GCD(g,r_d) 是 g 的非平凡因数.类似地,如果 b+d 是非零平方,而 a+d 不是,则 (x-b) 是 g 的公因数,而 (x-a) 不是。根据数论,一种情况或另一种情况接近 d 的可能选择的一半,这意味着平均而言,在我们找到 g 的非平凡因子之前,它需要恒定数量的 d 选择,实际上是一个分离 (xa)来自 (xb)。

【讨论】:

  • 多项式 GCD 没有我说的那么快。步数受较小多项式的次数限制,这在这里已经足够了。
【解决方案2】:

你的答案很好,但我想我找到了一个很好的方法来找到任何数字的根:这个方法基于“LATTICES”。令 rRmod p 的根。我们必须找到另一个函数,例如 h(x),使得 h 不大并且 rh 的根时间>。格法找到这个函数。首先,我们必须创建一个格的多项式基,然后,使用“LLL”算法,我们找到一个以 r 为根且不以 p为模的“最短向量” >。事实上,我们用这种方式消除了模p

有关详细说明,请参阅“Coppersmith D.寻找小度多项式的小解。在密码学和格中”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2013-03-01
    • 2020-11-12
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多