Ваша задача - медленно вычислить возведение в степень, выполнив следующие шаги:
Учитывая два входа (в этом примере 4 и 8), вы должны вычислить возведение в степень, вычисляя уравнение побитно. Вы бы 4^8
имели, иметь большее базовое значение (4) и меньший показатель степени (8). Вы можете сделать это, используя больше возведения в степень и деления. Вы можете разделить показатель степени на значение X (при условии, что X - простой делитель показателя степени) и сделать базовое значение ( B ) в B^X
. Например, вы можете сделать:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
Я заменил X на 2 в предыдущем уравнении.
Вы можете «упростить» 16^4
дальше, снова с X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
И, наконец, рассчитать число (опять же X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
Следовательно,
4^8 = 16^4 = 256^2 = 65536
Это вывод, который вы должны дать. Выходной разделитель является немного гибким, например, вы можете разделить уравнения с помощью новых строк или пробелов вместо =
. Или вы можете поместить их в список (но вы не должны использовать цифру или ^
символ в качестве разделителя).
Как отметил Мартин Эндер, ^
он также гибкий. Например, вы можете использовать [A, B]
или A**B
вместо A^B
вывода.
X может быть только простым, что означает, что вы не можете использовать его, X = 8
чтобы перейти непосредственно к решению, а значения X будут только простыми множителями второго входа (экспоненты).
Примеры:
(input) -> (output)
4^8 -> 4^8=16^4=256^2=65536
5^11 -> 5^11=48828125
2^15 -> 2^15=32^3=32768 (2^15=8^5=32768 is also a valid output)
Имейте в виду, что формат ввода также гибкий (например, вы можете взять A \n B
или A B
вместо A^B
. Очевидно, что это не будет проблемой, если вы напишите функцию, принимающую два аргумента.
Во втором примере мы идем прямо к вычислениям, так как 11
это простое число, и мы не можем делать больше шагов.
Вы можете написать программу или функцию для решения этой проблемы, и вы можете распечатать или вернуть значение, соответственно.
Поскольку это код-гольф , выигрывает этот самый короткий код!
32^3
и8^15
тоже не 512.x^1
?Ответы:
Желе , 16 байт
Попробуйте онлайн!
Вход представляет собой единый список
[base, exponent]
. Возвращаемое значение нижней монадической ссылки представляет собой список списков, поскольку полная программа, представление этого списка печатается, например,2^15=8^5=32768^1
как:Как?
Он может быть отформатирован в виде сетки на 2 байта путем трейлинга
µG
, например:... или полностью отформатированный, включая обрезку
^1
, для 9, с трейлингомj€”^j”=ṖṖ
, например:источник
JavaScript (ES7), 55 байт
Используется
,
вместо=
(2^15,8^5,32768
).Контрольные примеры
Показать фрагмент кода
Примечание: фрагмент используется
Math.pow
вместо**
кросс-браузерной совместимости.источник
05AB1E ,
232217 байтСэкономили 5 байтов, заметив гибкий формат вывода.
Попробуйте онлайн!
объяснение
Пример для
2^15
источник
C
125123 + 4 (-lm
) =129127 байтПринимает двойное и целое число.
Попробуйте онлайн!
источник
Haskell, 64 байта
Пример использования:
2 # 32
->[[2,32],[4,16],[16,8],[256,4],[65536,2],[4294967296]]
. Попробуйте онлайн! ,Как это работает:
источник
Утилиты Bash + GNU, 82
Скрипт рекурсивной оболочки. Похоже, это не работает в TIO, но работает нормально, когда сохраняется как скрипт и выполняется:
источник