Factoring

針對大型半素數優化 Pollard 的 Rho 算法

  • October 31, 2012

我使用 C++ 和 GMP 庫編寫了 Pollard 的 Rho 因式分解算法的實現。

大數字時它相當快,但是我沒有實現任何形式的循環檢測(我只是試圖避免這個問題,見下文),它在小數字上掙扎。

這是我的實現的虛擬碼:

輸入 n
x = 2
y = 2
d = 1
c = 1
z = 1
失敗 = 0
溫度 = 0

而 d == 1 或 d == n
z = 1
失敗 = 失敗 + 1
如果失敗 = sqrt(n)
c = c + 1
失敗 = 0

重複 100 次:
x = x^2 + c mod n
重複兩次:
y = y ^ 2 + c mod n
溫度 = 絕對(x - y)
z = z * 溫度

d = gcd(z, n)

我想知道如何提高這個算法的效率?如果我使用大半素數,我需要擔心循環檢測嗎?

不妨將此作為答案,足夠的評論。這將回答您的最新問題:

  • 我不認為它們必須從 2 開始,但是它們需要從相同的值開始(根據循環檢測算法)。所以 2 是最簡單的選擇,並且由於假設該函式跟踪偽隨機序列,所以從哪裡開始並不重要。
  • 該函式可以是任何滿足 Rho 屬性的偽隨機函式(gcd 通過迭代它是守恆的,基本上,只要您擷取一個因子,它就會固有地“記住” $ n $ 無需儲存所有數字,這是核心概念)。但 $ x^2 + c $ 是最簡單的一個,所以它通常是最好的選擇,因為它計算速度很快,並且產生了一個相對混亂的序列模型 $ p $ .
  • $ c $ 可以是負數,因為函式取模 $ n $ ,所以負值仍然是正的,但它不能是 $ 0 $ 或者 $ −2 $ (為了防止瑣碎的循環 $ x = 0 $ 和 $ x = \pm 1 $ ).
  • 是的,我說“按順序”,這是一種機率算法,所以它通常要麼少一點,要麼多一點..這取決於 $ c $ 和找到的因素。這個想法是它在因素上非常快(最大約 20 位數的素數,所以我想說 40-50 位數的半素數是您在合理時間內使用 Pollard 的 Rho 得到的最好結果,考慮到這仍然是相當不錯的它的簡單性)

引用自:https://crypto.stackexchange.com/questions/5199