Argumenty funkcji Gödela β przyjmują trzy liczby naturalne.
Jest zdefiniowany jako β(x,y,z) = rem(x, 1 + (z + 1) · y) = rem(x, (z · y + y + 1) )
gdzie rem (a, b) oznacza resztę po całkowitym dzieleniu a przez b.
Lemat β stwierdza teraz, że:
Dla dowolnej sekwencji liczb naturalnych (k_0, k_1,…, k_n) istnieją liczby naturalne b i c takie, że dla każdego i ≤ n, β (b, c, i) = k_i.
Gödel potrzebuje pomocy, aby znaleźć b
i c
dla danego wejścia (k_0, k_1, … , k_n), k_i ∈ ℕ
.
Napisz funkcję, która przyjmuje tablicę długości n
, wypełnioną liczbami naturalnymi i daje możliwe b,c
dane wyjściowe, które spełniają lemat dla tablicy.
Nie zdobywaj rozwiązań brutalną siłą!
(Moim całkowicie nieprofesjonalnym zdaniem jest to brutalna siła, gdy najpierw dostajesz numer, a następnie wykonujesz obliczenia. To zgadywanie liczby, a następnie sprawdzanie, czy przypuszczenie było prawidłowe. To, co chcę zakodować, to rozwiązanie, które oblicza liczb i nie musi sprawdzać, czy spełniają lemat, ponieważ zostały do tego obliczone).
Skonstruuj je na podstawie podanych równań i informacji. Najkrótszy kod wygrywa, punkty bonusowe, jeśli to zrobisz, Javascript
ponieważ właśnie się w to włączam:)
Przykład:
[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)
aż znajdzie takie, które działa, byłoby brutalną siłą, a podejście, które biegnie w czasie liniowo na długości wejścia, nie byłoby, ale istnieje duża przerwa między nimi. Gdzie jest narysowana linia?