主题
Search

Dixon 因式分解法


为了找到 整数 xy 使得

 x^2=y^2 (mod n)
(1)

费马因式分解法的一种变形),在这种情况下,有 50% 的几率 GCD(n,x-y)n 的一个 因子,选择一个 随机 整数 r_i,计算

 g(r_i)=r_i^2 (mod n),
(2)

并尝试分解 g(r_i)。如果 g(r_i) 不容易分解(直至某个小的试除数 d),尝试另一个 r_i。在实践中,试用的 r 通常取为 |_sqrt(n)_|+k,其中 k=1, 2, ..., 这使得可以使用 二次筛法 因式分解方法。继续寻找并分解 g(r_i),直到找到 N=pid,其中 pi素数计数函数。现在对于每个 g(r_i),写出

 g(r_i)=p_(1i)^(a_(1i))p_(2i)^(a_(2i))...p_(Ni)^(a_(Ni)),
(3)

并形成 指数向量

 v(r_i)=[a_(1i); a_(2i); |; a_(Ni)].
(4)

现在,如果对于任何 ka_(ki) 都是偶数,那么 g(r_i) 是一个 平方数,并且我们找到了方程 (◇) 的解。否则,寻找一个 线性组合 sum_(i)c_iv(r_i),使得所有元素都是偶数,即,

 c_1[a_(11); a_(21); |; a_(N1)]+c_2[a_(12); a_(22); |; a_(N2)]+...+c_N[a_(1N); a_(2N); |; a_(NN)]=[0; 0; |; 0]  (mod 2)
(5)
 [a_(11) a_(12) ... a_(1N); a_(21) a_(22) ... a_(2N); | | ... |; a_(N1) a_(N2) ... a_(NN)][c_1; c_2; |; c_N]=[0; 0; |; 0]  (mod 2).
(6)

由于这必须仅在模 2 下求解,因此可以通过将 a_(ij)s 替换为

 b_(ij)={0   for a_(ij) even; 1   for a_(ij) odd.
(7)

高斯消元法 然后可以用来求解

 bc=z
(8)

对于 c,其中 z 是一个等于 0 (mod 2) 的 向量。一旦 c 已知,那么我们有

 product_(k)g(r_k)=product_(k)r_k^2 (mod n),
(9)

其中乘积是对所有 k 取的,对于这些 c_k=1。两边都是 完全平方数,因此我们有 50% 的几率,这会产生 n 的一个非平凡因子。如果不是,那么我们继续使用不同的 z 并重复该过程。不能保证此方法会产生因子,但在实践中,它比任何使用试除数的方法产生因子的速度都快。它特别适合并行处理,因为每个处理器都可以处理不同的 r 值。


使用 Wolfram|Alpha 探索

参考文献

Bressoud, D. M. 因式分解和素性检验。 New York: Springer-Verlag, pp. 102-104, 1989.Dixon, J. D. "整数的渐近快速因式分解。" Math. Comput. 36, 255-260, 1981.Lenstra, A. K. and Lenstra, H. W. Jr. "数论算法。" In 理论计算机科学手册,A 卷:算法和复杂性 (Ed. J. van Leeuwen). New York: Elsevier, pp. 673-715, 1990.Pomerance, C. "两个筛子的故事。" Not. Amer. Math. Soc. 43, 1473-1485, 1996.

在 Wolfram|Alpha 中引用

Dixon 因式分解法

请引用为

Weisstein, Eric W. "Dixon 因式分解法。" 来自 MathWorld--Wolfram Web 资源。 https://mathworld.net.cn/DixonsFactorizationMethod.html

主题分类