ゲーデルのβ関数は、3つの自然数を引数として取ります。
次のように定義されます β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )
ここで、rem(a、b)は、aをbで整数除算した後の剰余を示します。
β補題は次のように述べています:
自然数のシーケンス(k_0、k_1、…、k_n)には、i≤nごとにβ(b、c、i)= k_iとなる自然数bとcがあります。
ゲーデルは見つけるために助けを必要とb
し、c
任意の入力のために(k_0, k_1, … , k_n), k_i ∈ ℕ
。
n
自然数で満たされたlengthの配列を受け取り、配列のb,c
補題を満たす可能性のある出力を与える関数を作成します。
総当たりで解決策を得ないでください!
(私の完全に非専門家の意見では、最初に数字を取得してから計算するときは総当たりです。それは数字を推測し、次に推測が正しいかどうかを調べることです。ここでコーディングしたいのは、それらはそうするように計算されたため、補助定理を満たしているかどうかをチェックする必要はありません。)
与えられた方程式と情報でそれらを構築します。最短コード勝ボーナスポイントあなたがそれを行う場合Javascript
、私はちょうどそれに取得していますので、:)
例:
[5, 19, 7, 8] -> (1344595, 19)
1344505 % (1 + (0 + 1) * 19) = 5
1344505 % (1 + (1 + 1) * 19) = 19
1344505 % (1 + (2 + 1) * 19) = 7
1344505 % (1 + (3 + 1) * 19) = 8
5
PPCGへようこそ!これは良い最初の質問ですが、より明確にするために、いくつかのテストケースを追加することをお勧めします。
—
ライコニ
@Tweakimpたとえそうであっても、単一の有効な例は、かなり正式な定義を明確にするのに役立ちます。
—
マーティンエンダー
何が「ブルートフォース」とみなされるかは明確ではありません。明らかに、機能するペア
—
ピーターテイラー
(b, c)
が見つかるまですべてのペアを反復するアプローチは強引であり、入力の長さで線形に実行されるアプローチはそうではありませんが、それらの間に大きなギャップがあります。線はどこに描かれますか?
誰かがベータと言いましたか?
—
ベータ崩壊