主題
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 值。


使用 探索

參考文獻

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.

在 中引用

Dixon 因式分解法

請引用為

Weisstein, Eric W. "Dixon 因式分解法。" 來自 Web 資源。 https://mathworld.tw/DixonsFactorizationMethod.html

主題分類