Gödels β-Funktion verwendet drei natürliche Zahlen als Argumente.
Es ist definiert als β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )
wobei rem (a, b) den Rest nach ganzzahliger Division von a durch b bezeichnet.
Das β-Lemma besagt nun, dass:
Für jede Folge von natürlichen Zahlen (k_0, k_1,…, k_n) gibt es natürliche Zahlen b und c, so dass für jedes i ≤ n β (b, c, i) = k_i gilt.
Gödel braucht Hilfe bei der Suche nach b
und c
für einen bestimmten Input (k_0, k_1, … , k_n), k_i ∈ ℕ
.
Schreiben Sie eine Funktion, die ein n
mit natürlichen Zahlen gefülltes Array von Länge einnimmt und eine mögliche b,c
Ausgabe liefert , die das Lemma für das Array erfüllt.
Erhalten Sie keine Lösungen mit roher Gewalt!
(Meiner völlig unprofessionellen Meinung nach ist es brachiale Gewalt, wenn man zuerst eine Zahl erhält und dann die Berechnung durchführt. Das bedeutet, die Zahl zu erraten und dann zu prüfen, ob die Vermutung richtig war. Was ich hier codieren möchte, ist eine Lösung, die die berechnet Zahlen und muss nicht überprüfen, ob sie das Lemma erfüllen, weil sie dazu berechnet wurden.)
Konstruieren Sie sie mit den angegebenen Gleichungen und Informationen. Der kürzeste Code gewinnt, Bonuspunkte, wenn Sie es tun, Javascript
weil ich gerade dabei bin:)
Beispiel:
[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
(b, c)
bis einer gefunden wird, der funktioniert, rohe Gewalt, und ein Ansatz, der zeitlich linear in der Länge der Eingabe verläuft, nicht, aber es gibt eine große Lücke zwischen diesen. Wo ist die Linie gezeichnet?