係数が大きすぎます。

係数が大きすぎます。

ユーティリティを使用しようとしていますが、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サポートを有効にしていないようです(ほとんど使用されていない機能のためにコアシステムパッケージに追加のライブラリへの依存関係を追加するため、これは意味があります)。

がある場合は、モジュールにプログラムを含めることができますperlfactor.plMath::Prime::Util

$ /home/cuonglm/.cpan/build/Math-Prime-Util-0.31-9c_xq3/bin/factor.pl 115792089237316195423570985008687907852837564279074904382605163141518161494337
115792089237316195423570985008687907852837564279074904382605163141518161494337: 115792089237316195423570985008687907852837564279074904382605163141518161494337

答え2

coreutilsを使用することもできますfactor。ただし、bignum サポートでコンパイルする必要があります。参考として、いくつかのディストリビューション(Debianなど)に付属しているバイナリは、エラー608832)。ただし、GMPをインストールした後、ソースコードをダウンロードして再コンパイルできます。 (検索するとデフォルトとして使用されます。)

もう1つの解決策は、Pari / GP(整数理論で有名)を使用することです。

? factor(806578020551755900412008880903137528217525975284037923)
%1 =
[ 238366085426200783161668947 1]

[3383778439410064898661524209 1]

この数字を使用すると数秒かかります。

関連情報