我正在尝试使用factor
实用程序,但它告诉我该数字太大。是否有任何实用程序可以执行该factor
操作但不会告知数字太大?
答案1
也许你的factor
不是用构建的GMP
,所以它不能处理大于的数字2**64-1
:
$ factor 18446744073709551616
factor: `18446744073709551616' is too large
$ factor 18446744073709551615
18446744073709551615: 3 5 17 257 641 65537 6700417
运行此命令来检查是否factor
使用以下命令构建GMP
:
$ ldd /usr/bin/factor
linux-vdso.so.1 (0x00007fffda1fe000)
libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007faae00f5000)
libc.so.6 => /lib64/libc.so.6 (0x00007faadfd46000)
/lib64/ld-linux-x86-64.so.2 (0x00007faae037c000)
在某些机器上,这个限制可能会更高(数字必须适合uintmax_t
类型),但您的数字是 256 位数字,并且没有普通机器支持这么大的数字uintmax_t
(如果有的话)。
请注意,该factor
实用程序可以使用以下命令进行编译良好生产规范支持。在这种情况下,数字的大小实际上没有限制。您的发行版似乎尚未激活 GMP 支持(这是有道理的,因为它会将对额外库的依赖项添加到核心系统包中,以实现很少使用的功能)。
如果你有perl
,你可以尝试将factor.pl
程序包含在Math::Prime::Util
模块中:
$ /home/cuonglm/.cpan/build/Math-Prime-Util-0.31-9c_xq3/bin/factor.pl 115792089237316195423570985008687907852837564279074904382605163141518161494337
115792089237316195423570985008687907852837564279074904382605163141518161494337: 115792089237316195423570985008687907852837564279074904382605163141518161494337
答案2
您还可以使用factor
coreutils。但是它需要在 bignum 支持下进行编译。仅供参考,某些发行版(例如 Debian)附带的二进制文件并非如此(错误 608832)。但您可以下载源代码并在安装 GMP 后重新编译(如果找到,则默认使用该源代码)。
另一种解决方案是使用 Pari/GP(因数论而闻名):
? factor(806578020551755900412008880903137528217525975284037923)
%1 =
[ 238366085426200783161668947 1]
[3383778439410064898661524209 1]
有了这个数字,需要几秒钟的时间。