自制整數分解工具——pyfactor

自制整數分解工具——pyfactor

我的畢業設計和整數分解算法有關,爲此我看了一些論文,並嘗試用python實現一些常見的整數分解算法,然後整合起來做了一個小工具,起名爲“pyfactor

pyfactor的效率不高,我自己實現的ECM方法、SIQS方法並不理想,但用作教學目的,給未來選修相關課程的學弟學妹提供現成的教具,我覺得是綽綽有餘的。

該項目託管在碼雲https://gitee.com/Y_F_Wang/pyfactor

目前完成了一半,提供了CLI接口,將來會提供一個GUI接口(其實不重要)下面給出pyfactor 0.1版本的項目介紹

pyfactor ——基於python3的整數分解工具

介紹

pyfactor是一個完全使用python編寫的整數分解工具,可以分解十進制50位以內的正整數。

這個工具是我的畢業設計作品,純粹是一個實驗性質的小程序,和目前程序的整數分解工具
(如:msieve,yafu等等)相比,運行效率很低。但其分解能力可以完全勝任教學目的

支持的python版本:3.5以上

依賴的庫:SymPy(推薦版本爲1.3以上)

建議直接安裝Python科學計算的發行版——Anaconda,默認就預裝了常見的python的科學計算庫。

目前只提供了核心算法包pyfactor、命令行(CLI)工具pyfactor_cli.py。

圖形界面(GUI)工具pyfactor_gui.py正在開發中,使用python默認的GUI套件tkinter。

算法介紹

pyfactor使用瞭如下的整數分解算法

  • Pollard’s rho (Brent改進方法)
  • Pollard’s p+1
  • Williams p-1
  • ECM (橢圓曲線因子分解算法)
  • SIQS (二次篩法)

其中 p-1方法 和 p+1方法實現了原始論文的第一階段算法;
ECM方法目前還不穩定,找到十進制20位以下的素因子應該沒問題;
SIQS方法尋找光滑數仍然較慢,分解50位以下的整數應該沒問題;

使用說明

  1. pyfactor依賴SymPy,使用前需要安裝SymPy
  2. 該工具的目標人羣是學習整數分解算法的學弟學妹,對於較大的整數運行效率慢的話,請不要吐槽(逃……)
  3. pyfactor目前提供了一個命令行(CLI)工具 —— pyfactor_cli.py,
    在命令行下運行 pyfactor_cli.py,可以使用本工具。
    圖形界面(GUI)工具 —— pyfactor_gui.py目前還在開發中,依賴tkinter工具。
  4. 如果想要單獨調用某個整數分解算法的話,可以直接調用pyfactor這個python包:

from pyfactor.rho import brent				  # 導入Brent方法(Pollard rho方法的改進版本)
from pyfactor.pm1 import pm1				  # 導入Pollard p-1方法
from pyfactor.pp1 import pp1				  # 導入Williams p+1方法
from pyfactor.ecm import parallel_ecm as ecm  # 導入ECM方法
from pyfactor.siqs import siqs_main as siqs   # 導入SIQS方法


>>> brent(2**2**5+1)
641

>>> pm1(12341234)
73

>>> pp1(123412345)
35

>>> ecm(2**2**7+1)
59649589127497217

>>> siqs(760525083515850218314740691253136455584879)
(845041919143549452517, 899985037767881262787)

前四個算法的輸出是輸入整數的一個非平凡因子,siqs的輸出是兩個非平凡因子。具體細節可以直接看源代碼。要注意,這些算法不會對輸入參數進行檢驗,因此請確保輸入參數是合數。如果調用SIQS算法,輸入參數要大於等於十進制30位。

  1. 使用過程中遇到問題,可以聯繫[email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章