Você recebe um número inteiro não negativo n
e um número inteiro p >= 2
. Você precisa adicionar alguns p
-ésimos poderes ( p=2
quadrados, p=3
cubos) para obter n
. Isso é sempre para qualquer não-negativo n
, mas você não conhece muitos p
poderes (de qualquer número inteiro positivo ) que precisará.
Esta é sua tarefa: encontre o número mínimo de p
-ésimos poderes aos quais pode somar n
.
Exemplos
>>> 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
Um artigo relacionado da Wikipedia sobre esse problema, o problema de Waring .
Regras
Seu código deve ser um programa ou uma função.
A entrada é dois inteiros
n
ep
em qualquer ordem. Você pode assumir que todas as entradas são válidas (n
qualquer número inteiro positivo,p >= 2
A saída é um número inteiro que representa o número de potências necessárias para somar
n
.Isso é código de golfe, portanto o programa mais curto vence., Não necessariamente o mais eficiente.
Todo e qualquer embutido é permitido.
Como sempre, se o problema não estiver claro, entre em contato. Boa sorte e bom golfe!
fonte
Respostas:
Pitão,
2019 bytesSalvo 1 byte graças a FryAmTheEggman.
Recebe entrada em duas linhas,
p
primeiro e depoisn
.Experimente online. Suíte de teste.
Explicação
O código define uma função recursiva
y(b)
que retorna o resultado paramin_powers(b, p)
.fonte
Mathematica
6150 bytesCom 11 bytes salvos por LegionMammal978.
Quando restrito ao poder de contar números, esse problema é direto (no Mathematica). Quando estendido para incluir potências de números inteiros, é um pesadelo.
Casos de teste
PowersRepresentationsp[n,k,p]
encontra todos os casos em quen
pode ser expresso como uma soma dek
números inteiros positivos elevados àp
décima-potência.Por exemplo,
Verificando,
fonte
Java -
183177 bytes183 bytes
Ungolfed
Resultado
fonte
p(32,2)
retorna5
quando deveria retornar2
(4^2 + 4^2 = 32
).Python 2, 66 bytes
Recursivamente tenta subtrair cada
p
enésima potência que deixa o restante não negativo, calculando seu valor em cada restante e assumindo o mínimo mais 1. No 0, sai 0.A verificação feia
if n/k**p
(equivalente aif k**p<=n
) é impedir que a função entre nos negativos e tente tirar amin
lista vazia. Se o Python tivermin([])=infinity
, isso não seria necessário.fonte
C (gcc) , 122 bytes
Experimente online!
fonte