On vous donne un entier non négatif n
et un entier p >= 2
. Vous devez ajouter quelques p
pouvoirs ( p=2
signifie carrés, p=3
cubes) pour obtenir n
. C'est toujours pour tout non négatif n
, mais vous ne connaissez pas beaucoup de p
pouvoirs -th (d'aucun entier positif ) dont vous aurez besoin.
C'est votre tâche: trouver le nombre minimum de p
-th pouvoirs qui peuvent résumer n
.
Exemples
>>> 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
Un article Wikipédia sur ce problème, le problème de Waring .
Règles
Votre code doit être un programme ou une fonction.
L'entrée est deux entiers
n
etp
dans n'importe quel ordre. Vous pouvez supposer que toutes les entrées sont valides (n
est tout entier positif,p >= 2
La sortie est un entier représentant le nombre de puissances nécessaires pour additionner à
n
.C'est le golf de code, donc le programme le plus court gagne., Pas nécessairement le plus efficace.
Tous les éléments intégrés sont autorisés.
Comme toujours, si le problème n'est pas clair, faites-le moi savoir. Bonne chance et bon golf!
la source
Réponses:
Pyth,
2019 octets1 octet enregistré grâce à FryAmTheEggman.
Prend l'entrée sur deux lignes, d'
p
abord et ensuiten
.Essayez-le en ligne. Suite de tests.
Explication
Le code définit une fonction récursive
y(b)
qui renvoie le résultat pourmin_powers(b, p)
.la source
Mathematica
6150 octetsAvec 11 octets enregistrés par LegionMammal978.
Lorsqu'il est limité aux pouvoirs de compter des nombres, ce problème est simple (dans Mathematica). Lorsqu'il est étendu pour inclure les pouvoirs des nombres entiers, c'est un cauchemar.
Cas de test
PowersRepresentationsp[n,k,p]
trouve tous les cas dans lesquelsn
peut être exprimé comme une somme d'k
entiers positifs élevés à lap
puissance -th.Par exemple,
Vérification,
la source
Java -
183177 octets183 octets
Non golfé
Résultat
la source
p(32,2)
retourne5
quand il devrait retourner2
(4^2 + 4^2 = 32
).Python 2, 66 octets
Essaie récursivement de soustraire chacun
p
puissance -th qui laisse le reste non négatif, de calculer sa valeur sur chaque reste et de prendre le minimum plus 1. Sur 0, sort 0.Le vilain contrôle
if n/k**p
(équivalent àif k**p<=n
) consiste à empêcher la fonction d'entrer dans les négatifs et d'essayer de prendre lamin
liste vide. Si Python l'a faitmin([])=infinity
, cela ne serait pas nécessaire.la source
C (gcc) , 122 octets
Essayez-le en ligne!
la source