В математике тетрация является следующим гипероператором после возведения в степень и определяется как повторное возведение в степень.
Добавление ( удалось п раз)
Умножение ( добавляется к себе, п раз)
Возведение ( умножается само по себе, п раз)
Тетрация ( возведенная в степень самостоятельно, n раз)
Обратные соотношения тетратации называются супер-корнем и супер-логарифмом. Ваша задача - написать программу, которая с учетом A и B выводит супер-корень B- го порядка для A.
Например:
- если A =
65,536
и B =4
это печатает2
- если A =
7,625,597,484,987
и B =3
это печатает3
A и B являются положительными целыми числами, и результат должен быть числом с плавающей запятой с точностью до 5 цифр после десятичной точки. Результат принадлежит реальному домену.
Будьте осторожны, у супер-корней может быть много решений.
Ответы:
C - стремясь к ясности, не пытался сжать код
Учитывая вклад:
Тогда в usually обычно должно быть только одно решение, что значительно упрощает задачу.
Код является:
Компилировать:
Бежать:
Например:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 при n ➙ ∞? (общеизвестный лимит)
Да!
n (e 1 / e ) ∞ ∞ при n ➙ ∞? (верхние границы)
Круто! (e 1 / e ≅ 1,44466786101 ...)
источник
Питон, 87 символов
Простой линейный поиск ответа.
Не по теме, но что такое * # $ (@! С
**
оператором python ?источник
(1e200)**2
с1e(200**2)
?OverflowError
в первом случае.Mathematica,
3540Создает список всех решений с точностью до 5 цифр.
Еще 5 символов, чтобы получить только реальное решение, которое требуют обновленные правила.
источник
Юлия
Игнорируется инструкция с плавающей запятой, поскольку вопрос определяет поведение только для целых чисел.
источник
Когда это стало кодом гольф? Я думал, что это было проблемой кода, чтобы придумать лучший алгоритм!
Код-гольф
APL, 33 символа
Это простой линейный поиск, начиная с C = 1 + 10 -6 и увеличивая его на 10 -6 до
log C log C log C ⋯ A ≤ 1,
где функция log C применяется рекурсивно B раз.
Примеры
Этот код очень медленный, но для небольших баз, таких как 2 или 3, он завершается за несколько секунд. Смотрите ниже для лучшей вещи.
Код-вызов
APL, логарифмическая сложность
На самом деле линейная сложность в корневом порядке, логарифмическая по размеру и точности результата:
время = O (B × log (C) + B × log (D))
где B - корневой порядок, C - запрашиваемая база тетратации, а D - количество запрашиваемых цифр точности. Эта сложность - мое интуитивное понимание, я не представил формального доказательства.
Этот алгоритм не требует больших целых чисел, он использует функцию log только для обычных чисел с плавающей запятой, поэтому он весьма эффективен для очень больших чисел, вплоть до предела реализации с плавающей запятой (либо двойной точности, либо произвольных больших чисел FP на Реализации APL, которые предлагают их.)
Точность результата можно контролировать, установив
⎕CT
(допуск сравнения) на желаемую допустимую ошибку (в моей системе это значение по умолчанию 1e¯14, примерно 14 десятичных цифр)Я не уверен, что
1≥⍵⍟⍣n
вышеприведенное может завершиться с ошибкой домена (потому что журнал отрицательного аргумента может либо сразу потерпеть неудачу, либо дать сложный результат, которого не было бы в домене≥
), но я не смог найти случай, который терпит неудачу.Примеры
«3» получается как точное значение, потому что это одно из значений, непосредственно попадающих в двоичный поиск (начиная с 2, удваивается до 4, делится на 3). В общем случае этого не происходит, поэтому результат будет аппроксимировать корневое значение с ошибкой ⎕CT (точнее, логарифмический тест каждой базы кандидатов выполняется с допуском ⎕CT.)
источник
Рубин, 79 байтов
Это то же самое, что и приведенная ниже программа, но менее точная, поскольку она запускает только 99 циклов.
Рубин, 87 байт
Попробуйте онлайн
Это просто деление пополам. Ungolfed:
источник
к [52 символа]
Модифицированная версия моего собственного поста n- го корня
Пример:
источник
Haskell
Простой линейный поиск, возвращает первое, наименьшее найденное совпадение.
пример
источник
Mathematica, 41 байт без оптимизации
Mathematica была в основном изобретена для решения подобных проблем. Одно простое решение состоит в том, чтобы построить задачу как вложенный степенной ряд и передать его встроенной
Reduce
функции, которая ищет аналитические решения уравнений. В результате следующее, помимо необычайно лаконичного кода, также не является грубой силой.Вы можете снять ограничение, чтобы предоставлять только решения с реальными числами, если вы терпеливы и хотите сэкономить шесть байтов. Вы также можете выразить некоторые из вложенных функций в сокращенной форме, чтобы сохранить еще несколько байтов. Как дано, он возвращается таким образом
источник
05AB1E , 16 байтов
Порт ответа @KeithRandall 's Python .
Попробуйте онлайн.
Объяснение:
ÐU²FXm}
также может бытьD²>и.»m
для того же количества байтов:источник