msieveで爆速な素因数分解!CentOSでのインストール手順

超高速な素因数分解をしてみたい…

そんな時、有能なツールの噂を効きました。

その名も msieve というライブラリです。

  • 複数の高速アルゴリズムを使い、
  • 巨大素数でも爆速で素因数分解可能
  • Linux/Windows両方に対応してる

とても興味があったので使ってみました。

でもLinuxでのインストールに苦戦したので、
参考にCentOSでのビルド手順を残しておきます。

0.msieveの概要、高速に素因数分解できる理由

これはC言語で実装されたライブラリです。

▼ 概要としてはこんな感じ

Msieve is a C library implementing a suite of algorithms to factor large integers. It contains an implementation of the SIQS and GNFS algorithms; the latter has helped complete some of the largest public factorizations known

引用元 : https://sourceforge.net/projects/msieve/

▼ 上記の意訳

Msieveは巨大整数を因数分解するアルゴリズム群を実装したCライブラリです。SIQSとGNFSっていうアルゴリズム実装が含まれていて、後者は知られている巨大数の素因数分解にも貢献している。

引用元 : https://sourceforge.net/projects/msieve/

なんかすごそうなライブラリ。

自前で素因数分解するよりも遥かに高効率です。

参考 : JavaScriptで超高速な素因数分解!osa_k法の実装例/欠点

早速CentOSにインストールしてみました。

※ これが大変だった…

1.GMPをビルド&インストール

初めにGMPをインストールします。

これは多倍長演算をおこなえるライブラリ。

これがMsieveビルドに必要になってきます。

▼ ターミナルで以下を実行していく

これでGMPのインストールは完了

もし"No usable m4 "エラーが出たなら…

僕の環境(CentOS)では、以下エラーが出ました。

▼ なんかエラーが出てきた

この解決に苦戦してしまった。

ただググると解決策が出てきました。

▼ Ubuntuにgcc、GMPをインストールする

この手順でGMPインストール成功です。

2.Msieveをビルド&インストール

いよいよMsieveをインストールしてみます。

以下の手順を実行するだけです。

これでmsieveがビルドされました。

ググるとビルド時に make all ECM=1  としている記事が多いですが、環境によってはEMCが使えないためECMなしでビルドしてます(CentOSではEMCがインストールできなかった)

あと先ほど書いたようにGMPなど他ライブラリに依存するので、ないならビルド・インストしてください。僕自身もそれでちょっと苦戦しました。

ひとまず実行環境が準備できたのでヨシ

3.msieveで巨大数を素因数分解

ということで素因数分解やってみます。

▼ 色々な数を素因数分解してみた

う~~ん、本当に爆速でビックリ

上記のように30桁とか70桁の素因数分解でもほぼ一瞬でおこなってくれます。実行結果を p3: 239 , p6: 909091  みたいに桁数付きで教えてくれるのも便利です。

使ってみて少しだけ感動を覚えました。

メモリ1GBの環境でも爆速で動いた

そして環境的な制約もありません。

現に以下環境でも問題なく動作しました。

  • OS : Amazon Linux 2
  • EC2タイプ : t2.micro
  • メモリ : 1GB
  • コア数 : 1個
  • ストレージ : 8GB

これはEC2最低レベルのインスタンスです。

それでもmsieveが優秀であるためか、こんなメモリ容量でも爆速で動かせました。70桁程度の素因数分解なら一瞬です。

ただ70桁を超えると数秒ほどかかるケースが増え、80桁以上では実用的な実行速度であるかは不明です。実用的な範囲では70~80桁が限界ですね。

でもメチャクチャ優秀だと思う。