yafu 的安装
windows 下的安装
https://sourceforge.net/projects/yafu/
下载后解压即可。
- 解压后有yafu-Win32.exe和yafu-x64.exe,推荐使用64位的。
linux 下的安装
Linux下我没有尝试,这里附上他人的安装过程:
- 我的linux环境: CentOS 6.7
- 注意安装yafu、msieve、gmp、gmp-ecm在同一目录下
- 我的安装位置:/root/sherlly
STEP 1: 安装依赖环境(zlib/GMP/GMP-ECM/msieve)
zlib
rpm -qa|grep zlib
yum install -y zlib-devel-1.2.3-29.el6.x86_64 zlib-1.2.3-29.el6.x86_64
GMP
rpm -qa|grep gmp
1,如果版本>6.0:
yum install -y gmp gmp-devel
2,如果版本<6.0或者没有找到:
wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
tar jxvf gmp-6.1.2.tar.bz2
mv gmp-6.1.2 gmp
cd gmp
./configure
make
make install
GMP-ECM
wget https://gforge.inria.fr/frs/download.php/file/4663/ecm-6.2.tar.gz
tar zxvf ecm-6.2.tar.gz
mv ecm-6.2 gmp-ecm
cd gmp-ecm
./configure
//如果提示error: GMP 5.0.0 or newer is required则ecm选择低一点的版本或者升级gmp
make
make install
msieve
wget http://downloads.sourceforge.net/project/msieve/msieve/Msieve%20v1.52/msieve152.tar.gz
tar zxvf msieve152.tar.gz
mv msieve-1.52 msieve
cd msieve
make all
STEP 2: 安装Yafu
1,下载源代码
git clone https://github.com/DarkenCode/yafu.git
cd yafu
2,修改MakeFile文件
vim MakeFile
在122行左右位置添加如下语句:
LIBS+= -lc -lz
在大概68行位置找到
LIBS += -L../gmp/lib/linux/x86_64
改为
LIBS += -L../gmp/.libs
在大概71行位置找到
LIBS += -L../gmp-ecm/lib/linux/x86_64
改为
LIBS += -L../gmp-ecm/.libs
在大概95行位置找到
LIBS += -L../msieve/lib/linux/x86_64
改为
LIBS += -L../msieve
3,编译安装
64位:make x86_64 NFS=1
32位:make x86 NFS=1
//添加环境变量(此处yafu安装位置为/root/sherlly/yafu,根据实际安装位置修改)
echo "export PATH=/root/sherlly/yafu:\$PATH">>/etc/profile
source /etc/profile
//运行程序
yafu
可能遇到的一些问题
- error: gnu/stubs-32.h: No such file or directory
yum install -y glibc-devel.i686 libstdc++-devel.i686
make: svnversion: Command not found
yum install -y svn make all
error: mpz_aprcl.h: No such file or directory
vim top/calc.c
//#include "mpz_aprcl.h"
#include "./aprcl/mpz_aprcl.h"
vim factor/factor_common.c
//#include "mpz_aprcl.h"
#include "../top/aprcl/mpz_aprcl.h"
vim arith/arith3.c
//#include "mpz_aprcl.h"
#include "../top/aprcl/mpz_aprcl.h"
error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
find / -name libgmp.so.* ln -s /usr/lib64/libgmp.so.3 /usr/lib64/libgmp.so.10
yafu的使用方法
使用cmd进入yafu的解压目录(为了方便的话,自己可以把该目录加入到环境变量。)
输入yafu-x64进入命令行
最常用的命令是factor(n),将n值分解
如分解987654321
完整命令:
cd D:
cd C:\Users\\*****\Desktop\题目\yafu (yafu安装地址)
yafu-x64.exe(推荐使用64位 yafu)
factor(987654321) (输入要分解的N即可)
结果:
使用yafu的时候遇到mismatched parens
这是因为在命令行里不支持过长的位数,所以我们只要把n的值从文件中去读取即可。
新建一个文件pcat.txt,内容里写上n的值,如:
966808932627497190635859236054960349099463975227350564265384373280336699853387254070662881265937565163000758606154308757944030571837175048514574473061401566330836334647176655282619268592560172726526643074499534129878217409046045533656897050117438496357231575999185527675071002803951800635220029015932007465117818739948903750200830856115668691007706836952244842719419452946259275251773298338162389930518838272704908887016474007051397194588396039111216708866214614779627566959335170676055025850932631053641576566165694121420546081043285806783239296799795655191121966377590175780618944910532816988143056757054052679968538901460893571204904394975714081055455240523895653305315517745729334114549756695334171142876080477105070409544777981602152762154610738540163796164295222810243309051503090866674634440359226192530724635477051576515179864461174911975667162597286769079380660782647952944808596310476973939156187472076952935728249061137481887589103973591082872988641958270285169650803792395556363304056290077801453980822097583574309682935697260204862756923865556397686696854239564541407185709940107806536773160263764483443859425726953142964148216209968437587044617613518058779287167853349364533716458676066734216877566181514607693882375533
注意:最后面一定要换行,不然会出现eof; done processing batchfile
然后运行命令为:
yafu-x64 "factor(@)" -batchfile pcat.txt
- 注意:运行后,pcat.txt就会消失了。