Β-функция Геделя принимает в качестве аргументов три натуральных числа.
Определяется как β(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.
Гедель нуждается в помощи, чтобы найти 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)
пока не находит тот, который работает, будет грубой силой, а подход, который работает по времени, линейному по длине входных данных, не будет, но между ними существует большой разрыв. Где проведена линия?