По заданным целым числам N , P > 1
найдите наибольшее целое число M
такое, что P ^ M ≤ N
.
I / O:
Ввод дан как 2 целых числа N
и P
. На выходе будет целое число M
.
Примеры:
4, 5 -> 0
33, 5 -> 2
40, 20 -> 1
242, 3 -> 4
243, 3 -> 5
400, 2 -> 8
1000, 10 -> 3
Примечания:
Ввод всегда будет действительным, то есть он всегда будет целым числом больше 1.
Кредиты:
Кредит на имя идет к @cairdcoinheringaahing. Последние 3 примера предоставлены @Nitrodon, и заслуга в улучшении описания принадлежит @Giuseppe.
code-golf
math
number
arithmetic
Мухаммед Салман
источник
источник
Ответы:
Brain-Flak , 74 байта
Попробуйте онлайн!
Это использует ту же концепцию, что и стандартный алгоритм положительного целочисленного деления Брейна-Флака.
источник
JavaScript (ES6), 22 байта
Сохранено 8 байт благодаря @Neil
Принимает ввод в синтаксисе карри
(p)(n)
.Попробуйте онлайн!
источник
Excel, 18 байт
Принимает ввод "n" в A1 и ввод "p" в A2.
источник
INT
функцию вместо того,TRUNC
чтобы сохранить 2 байта.Желе , 3 байта
Здесь не используется арифметика с плавающей точкой, поэтому нет проблем с точностью.
Попробуйте онлайн!
Как это устроено
источник
Сетчатка 0.8.2 , 35 байт
Попробуйте онлайн! Объяснение:
Преобразуйте аргументы в одинарные.
Если второй аргумент делит первый, замените первый аргумент
#
целочисленным плюсом, отбрасывая оставшуюся часть. Повторяйте это, пока первый аргумент не станет меньше второго.Посчитайте, сколько раз цикл побежал.
источник
Japt, 8 байт
Попытайся
источник
F.g()
- но они невероятно полезны.Haskell , 30 байт
Попробуйте онлайн!
источник
until((>n).(p^))(1+)0-1
илиuntil(\x->p^x*p>n)(1+)0
дает вам до 27 байтов.Perl 6 , 13 байт
Попробуйте онлайн!
Конкатенация, составляющая log и floor, неявно имеет 2 аргумента, потому что первая функция log ожидает 2. Результатом является функция.
источник
1000, 10
это возвращает 2.Haskell , 16 байт
Попробуйте онлайн!
Haskell был разработан математиками, поэтому в Prelude есть хороший набор математических функций.
источник
R , 25 байт
Попробуйте онлайн!
Возьмите журнал
P
базыN
и выполните целочисленное деление1
, так как оно корочеfloor()
. Это немного страдает от числовой точности, поэтому я представлю также ответ ниже, который не должен, кроме возможного целочисленного переполнения.R , 31 байт
Попробуйте онлайн!
источник
p
наp+.1
в 25 байтах ответа , и вы по- прежнему будете в порядке, в течение 28 байтPython 2 , 39 байт
Попробуйте онлайн!
источник
Рубин , 31 байт
Итак, все эти основанные на журнале подходы склонны к ошибкам округления, так что вот еще один метод, который работает с целыми числами и свободен от этих проблем:
Попробуйте онлайн!
Но вернемся к логарифмам, хотя неясно, с какой точностью мы должны поддерживать входные данные, но я думаю, что этот маленький трюк решил бы проблему округления для всех более или менее «реалистичных» чисел:
Рубин , 29 байт
Попробуйте онлайн!
источник
C (gcc) +
-lm
, 24 байтаПопробуйте онлайн!
источник
long long
но что этоbytes bytes
? : Pf(n,m){n=(float)log(n)/log(m);}
кажется, работает @ 31 байтEmojicode ,
4948 байтовПопробуйте онлайн!
источник
APL (Dyalog Unicode) , 2 байта
Попробуйте онлайн!
Довольно просто.
⍟
Журнал⌊
полисточник
⌊⍟
05AB1E , 6 байтов
Попробуйте онлайн!
источник
JavaScript ,
4033 байта-3 байта благодаря DanielIndie
Принимает ввод в синтаксисе карри.
Попробуйте онлайн!
источник
toString
Решение работает только для баз до 36.Пари / ГП, 6 байт
(встроенное добавлено в версии 2.7, март 2014 г. Принимает два аргумента, с необязательной третьей ссылкой, которая, если имеется, устанавливается на основание, возведенное в результат)
источник
logint
который действителен и насчитывает 5 байтов меньше.Python 2, 3, 46 байтов
-1 спасибо Джонатану
Python 1, 47 байт
источник
n~-i
на один байт корочеn i-1
.JavaScript (Node.js) , 22 байта
Попробуйте онлайн!
Карри рекурсивная функция. Используйте как
g(P)(N)
. Менее подвержен ошибкам с плавающей запятой, чем при использованииMath.log
, и (я полагаю) код дает правильные значения, если оба входа являются безопасными целыми числами (ниже2**52
).источник
Haskell ,
3534 байтаСпасибо @Laikoni за сохранение 1 байта
Попробуйте онлайн!
источник
J 5 байт
Попробуйте онлайн!
источник
Wolfram Language (Mathematica)
1510 байт(требуется обратный порядок на входе)
Оригинальная подача
источник
⌊Log@##⌋&
на один байт корочеForth (gforth) , 35 байтов
Попробуйте онлайн!
Можно было бы сэкономить 5 байтов путем замены ожидаемых входных параметров, но вопрос указывает, что N должно быть первым (можно привести аргумент, что в постфиксном языке «First» означает «top-of-stack», но я буду придерживаться буквы правил для сейчас)
объяснение
источник
Pyth,
64 байтаСохранено 2 байта благодаря Mmenomic
Попробуйте онлайн
Как это устроено
.l
это журнал B (A)Если честно, я понятия не имею, как
F
работает. Но если это работает, это работает.s
усекает число с плавающей точкой до целого, чтобы дать нам наибольшее целое число дляM
.источник
/FlM
Чудо , 9 байт
Пример использования:
объяснение
Подробная версия:
Это написано бессмысленно.
sS
передает элементы списка в качестве аргументов функции (в данном случае,log
).источник
Gforth , 31 байт
использование
Попробуйте онлайн!
объяснение
К сожалению, FORTH использует выделенный стек с плавающей точкой. Для этого мне нужно
SWAP
(обменять) входные значения, чтобы они попадали в стек с плавающей запятой в правильном порядке. Я также должен переместить значения в этот стек с помощьюS>F
. При перемещении результата с плавающей запятой обратно в integer (F>S
) у меня есть преимущество, чтобы получить усечение бесплатно.Более короткая версия
Растягивая требования и предоставляя входные данные в формате float и в правильном порядке, существует более короткая версия с 24 байтами.
Попробуйте онлайн!
источник
: f .... ;
либо преобразован в программу, которая принимает ввод с помощьюKEY
илиACCEPT
Шелуха ,
874 байтаПопробуйте онлайн!
источник
C (gcc) , 61 байт
Попробуйте онлайн!
источник
Japt , 5 байт
Попробуйте онлайн!
8 байт
Попробуйте онлайн!
источник
ì
вместо того,s
какs
не удастся, еслиV>36
.V>36
.