Вам дано неотрицательное целое число n
и целое число p >= 2
. Вам нужно сложить вместе несколько p
степеней ( p=2
значит квадраты, p=3
кубы), чтобы получить n
. Это всегда для любого неотрицательного n
, но вы не знаете много-й p
степени (любого положительного целого числа), которая вам понадобится.
Это ваша задача: найти минимальное количество p
-й силы, которое можно суммировать n
.
Примеры
>>> min_powers(7, 2)
4 # you need at least four squares to add to 7
# Example: (2)^2 + (1)^2 + (1)^2 + (1)^2 = 4 + 1 + 1 + 1 = 7
>>> min_powers(4, 2)
1 # you need at least one square to add to 4
# Example: (2)^2 = 4
>>> min_powers(7, 3)
7 # you need at least seven cubes to add to 7
# Example: 7*(1)^3 = 7
>>> min_powers(23, 3)
9 # you need at least nine cubes to add to 23
# Example: 2*(2)^3 + 7*(1)^2 = 2*8 + 7*1 = 23
Связанная статья Wikipedia по этой проблеме, проблеме Waring .
правила
Ваш код должен быть программой или функцией.
Ввод двух целых
n
иp
в любом порядке. Вы можете предположить, что все входные данные действительны (n
любое положительное целое число,p >= 2
Выход - целое число, представляющее количество степеней, необходимое для суммирования
n
.Это код гольф, поэтому выигрывает самая короткая программа . Не обязательно самая эффективная.
Любые встроенные модули разрешены.
Как всегда, если проблема неясна, пожалуйста, дайте мне знать. Удачи и хорошего гольфа!
источник
Ответы:
Pyth,
2019 байтовСохранено 1 байт благодаря FryAmTheEggman.
Принимает ввод в две строки,
p
сначала, а затемn
.Попробуйте онлайн. Тестирование.
объяснение
Код определяет рекурсивную функцию,
y(b)
которая возвращает результат дляmin_powers(b, p)
.источник
Mathematica
6150 байтС 11 байтами, сохраненными LegionMammal978.
Когда проблема ограничена степенями подсчета чисел, эта проблема проста (в Mathematica). Когда расширено, чтобы включить полномочия целых чисел, это кошмар.
Тестовые случаи
PowersRepresentationsp[n,k,p]
находит все случаи, в которыхn
можно выразить суммуk
положительных целых чисел, возведенных в-p
степень.Например,
Проверка,
источник
Ява -
183177 байт183 байта
Ungolfed
Результат
источник
p(32,2)
возвращается,5
когда должен вернуться2
(4^2 + 4^2 = 32
).Python 2, 66 байт
Рекурсивно пытается вычесть каждую-ю
p
степень, оставляя остаток неотрицательным, вычисляя его значение для каждого остатка и получая минимум плюс 1. При 0 выдает 0.Уродливая проверка
if n/k**p
(эквивалентнаяif k**p<=n
) состоит в том, чтобы остановить функцию от перехода в негативы и попытки получитьmin
пустой список. Если у Python естьmin([])=infinity
, это не нужно.источник
C (gcc) , 122 байта
Попробуйте онлайн!
источник