Β-функція Ґеделя бере в якості аргументів три натуральних числа.
Визначається як β(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) існують натуральні числа b і c такі, що для кожного i ≤ n, β (b, c, i) = k_i.
Gödel потребує допомоги, щоб знайти b
та c
отримати будь-яку інформацію (k_0, k_1, … , k_n), k_i ∈ ℕ
.
Напишіть функцію, яка займає масив довжини n
, заповнений натуральними числами і дає можливий 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
(b, c)
поки не знайде той, який працює, був би грубою силою, а підхід, який працює в часі лінійним по довжині вводу, не був би, але між ними великий розрив. Де намальована лінія?