Существует уравнение, предполагающее n
и x
положительное,
это выражает отношения между двумя мономами, один из которых является распространенным искажением другого. Многие люди делают простую ошибку приравнивая их (то есть 3x^2
и (3x)^2
).
Вызов
Учитывая положительное целое число, i
определяют и возвращают решение n
и x
с наименьшей суммой в виде массива [n, x]
. В случае ничьей любой набор решений является приемлемым.
Тестовые случаи
62658722541234765
[15, 11]
202500
[4, 15]
524288
[8, 4]
33044255768277
[13, 9]
code-golf
number-theory
Зак Гейтс
источник
источник
[x, n]
вместо[n, x]
?n
иx
целые, верно?[n, x]
и нет ограничения по времени @Fatalizen
иx
являются целыми числами @LuisMendoОтветы:
Брахилог , 35 байт
Попробуйте онлайн!
объяснение
Мы строим список
[N, X]
, гдеN >= X
, затем, после присвоения ему значений, мы пробуем и то,[N, X]
и другое[X, N]
по возможности. Например, еслиN
получает назначено3
, мы будем тестировать через возвраты[3, 1]
,[1, 3]
,[3, 2]
,[2, 3]
,[3, 3]
и[3, 3]
. После этого произойдет следующий шаг возврата по значениюN
, на которое пойдут4
и т. Д.источник
Mathematica, 61 байт
Спасибо миль за сохранение 2 байтов, плюс целую кучу байтов, которые я насчитал без причины!
Вычисляет таблицу пар {n, x}, где x = (i / n) ^ (1 / n), используя все возможные значения n; сохраняет только те, для которых соответствующий x является целым числом; затем возвращает пару с наибольшим значением n.
Здесь «все возможные значения n» находятся в диапазоне от 1 до 2 * ln (i). Это игнорирует решение {n, x} = {i, 1}, но это нормально, поскольку решения {n, x} = {1, i} будет достаточно, если это лучший выбор. Таким образом, x никогда не должен быть меньше 2, что означает, что n * 2 ^ n ≤ i, и все такие n меньше 2 * ln (i).
Используя исчисление, можно показать, что пара {n, x}, минимизирующая их сумму в этом контексте, такая же, как пара {n, x} с наибольшим n (не считая {i, 1}). Поэтому начальная
Last
буква достаточно хороша, чтобы найти оптимальную пару.источник
IntegerQ@*Last
для сохранения 2 байта, но я также считаю 63 не 86 байтов в этой текущей версии.MATL , 22 байта
Выходы
x
,n
в таком порядке.Вход ограничен типом
double
данных MATL по умолчанию , который может точно представлять только целые числа2^53
. Это исключает первый тест (тем не менее, он дает правильный результат, но это не может быть гарантировано в целом для входов такого размера).Попробуйте онлайн!
объяснение
Код использует два вложенных цикла:
do...while
цикл проходит все возможные суммыn+x
в порядке возрастания. Цикл будет остановлен, как только будет найдено решение. Это гарантирует, что мы выводим решение с минимальной суммой.for each
цикл проверяет всеn
иx
с этой суммой. Когда сумма совпадает с входом, внутренний цикл завершается, и условие цикла внешнего цикла устанавливаетсяfalse
так, чтобы выход тоже был завершен .Код комментария:
источник
Желе ,
2316 байтУчитывая
i
, это генерирует все целочисленные пары с заменой в[1, i]
. Затем он выполняет ту же фильтрацию и сортировку, что и в предыдущем решении, показанном ниже. Поскольку нет ограничений по времени, грубая сила будет работать, если будет достаточно времени.Попробуйте онлайн! , но не пытайтесь большие значения в Интернете.
На моем компьютере вычисление результата
i = 2048
использования неэффективной версии занимает около 6 минут .Эффективная версия
Это предыдущее решение для 23 байтов, способное быстро решать большие значения.
Учитывая
i
, вычисляет делителиi
для генерации пар,[n, x]
гдеn
есть делитель иx = floor( (i/n)^(1/n) )
. Затем фильтрует его по значениям гдеn * x^n == i
, сортирует оставшиеся пары по их сумме и возвращает первую пару.Попробуйте онлайн! или Проверьте все контрольные примеры.
объяснение
источник
PHP, 104 байта
Это выводит все возможные решения не в предлагаемом формате 73 байта
источник
Perl, 52 байта
Включает +2 для
-ap
Внести вклад в STDIN
mono.pl
:Потребовалось некоторое усилие, чтобы заставить это работать
1
тоже. Я понятия не имею, могут ли ошибки с плавающей запятой возвращать неправильный ответ для некоторых входов.источник