タスクは、合成数の重要な要素を見つけることです。
コードの長さが140バイトを超えないことを条件に、複合数の重要な要素をできるだけ早く見つけるコードを記述します。出力は、あなたが見つけた要素である必要があります。
コードは、たとえば関数の引数としてなど、便利な方法で入力を取得し、出力を提供できます。
すべての要因をリストするテストケース(出力する必要があるのは1つだけです)
187: 11 17
1679: 23 73
14369648346682547857: 1500450271 9576890767
34747575467581863011: 3628273133 9576890767
52634041113150420921061348357: 2860486313 5463458053 3367900313
82312263010898855308580978867: 264575131106459 311111111111113
205255454905325730631914319249: 2860486313 71755440315342536873
1233457775854251160763811229216063007: 1110111110111 1000000000063 1111111999999
1751952685614616185916001760791655006749: 36413321723440003717 48112959837082048697
テストに興味があるかもしれない次の難しいテストケースであなたの答えを採点しません:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
スコア
スコアは、上記のすべてのテストケースを因数分解するための合計時間であり、因数分解に失敗するたびに10分のペナルティがあります(すべて最も近い秒に丸められます)。コードは他の整数でも機能するはずです。つまり、これらの答えをハードコーディングするだけではいけません。
10分後にコードを停止します。
2人が同じスコアを獲得した場合、最初の答えが勝ちます。
制限事項
コードでは、整数分解を実行する組み込み関数またはライブラリ関数を使用できません。入力は256ビット未満であると想定できます。すべての入力番号は合成されます。
どうやって時間を計るの?
私はtime ./myprog
、Ubuntuシステムで文字通りタイミングを実行するので、定義した機能を含む完全なプログラムも実行してください。
コンパイルされた言語に関する注意
私のマシンでは、コンパイル時間は1分以内でなければなりません。
実際に可能ですか?
スペースの制約を無視すると、純粋なPythonコード+ pypyを使用して、コンピューター上でそれぞれ2秒未満でファクタリングできます。
それでは、非自明な因数分解アルゴリズムとは何ですか?
Pollardのrhoアルゴリズムは高速で、ゴルフに適しています。もちろん、整数を因数分解する方法は他にもたくさんあります。
二次ふるいはさらに高速です。それを140バイトに圧縮することは、深刻な課題のようです。
一流のスコア
- SEJPM、最後のテストケースの10分ペナルティ+ Haskellの 16秒
2
or 2, 2
ですか?
2 ** 1024
ます。