参照satfactor
:
整数因数分解をブール値のSATISFIABILITY問題に変換する
シェーン・ネフ
概要
少なくともユークリッドの時代から、人間にとって大きな整数の要因を決定することは興味がありました。整数を表現するのに必要なビット数に関して、指数関数的時間未満でスケーリングするこの問題の既知の一般的なアルゴリズムはありません。
このコードがすること
整数因数分解問題をブール値のSATISFIABILITY問題に変換します。問題がSATソルバーによって解決される場合、整数因子が抽出されます。
ブール充足可能性ソルバーは毎年改善されています。2年ごとに、ソルバー間の国際競争が行われます(
http://www.satcompetition.org/およびhttp://www.satlive.org/を参照)。これらの最先端のソルバーは、現存する最も古いオープンな数学の問題の1つに対してどれだけうまく機能しますか?
このプロジェクトには2つの主な目的があります
。1)問題を変換し、対象の整数を因数分解します。
2)解決可能または解決不可能なSATISFIABILITY問題をすばやく作成します。その問題は作成者が簡単に制御できます。
-解決できないSATISFIABILITY問題を作成するには、素数をエンコードするだけです。
-より困難ではあるが解決可能な問題を作成するには、より少ない要因でより大きな複合数を選択します。
興味の数は、どんなサイズでもかまいません!
オープンソースのSATISFIABILITYソルバーがいくつかあります。これらのいくつかについては、http://www.satlive.org/を参照してください。
構築する
make -C src /
の仕方
バイナリ形式で関心のある数を入力します。
bin / iencode 10101> composite.21
//お気に入りのソルバーで解決し、結果をsolution.txtに格納します
bin / extract-sat composite.21 solution.txt
出力は次のようになります:
00011
00111
これは、10進整数3および7、21の係数のバイナリ表現です。
入力整数に2つ以上の因子があり、SAT問題が解決される場合、出力は2つの因子のみになります。これらは素数ではない場合があります(Maxima、Maple、またはMathematicaで簡単にテストできます)。
すべてのSATソルバーが同じ形式で結果を出力するわけではありません。これらの結果をわずかに修正する必要があるかもしれません。extract-satには、整数のリスト(任意の行数)を含むソリューションファイルが必要です。例えば、
1-2 3 4 -5 ...