自制整数分解工具——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]

你可能感兴趣的:(数学问题)