自制整數分解工具——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位以下的整數應該沒問題;
使用說明
- pyfactor依賴SymPy,使用前需要安裝SymPy
- 該工具的目標人羣是學習整數分解算法的學弟學妹,對於較大的整數運行效率慢的話,請不要吐槽(逃……)
- pyfactor目前提供了一個命令行(CLI)工具 —— pyfactor_cli.py,
在命令行下運行 pyfactor_cli.py,可以使用本工具。
圖形界面(GUI)工具 —— pyfactor_gui.py目前還在開發中,依賴tkinter工具。 - 如果想要單獨調用某個整數分解算法的話,可以直接調用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位。
- 使用過程中遇到問題,可以聯繫[email protected]