Sie erhalten eine nichtnegative Ganzzahl n
und eine Ganzzahl p >= 2
. Sie müssen einige p
Potenzen ( p=2
bedeutet Quadrate, p=3
bedeutet Würfel) addieren , um zu erhalten n
. Dies gilt immer für alle nichtnegativen Potenzen n
, Sie kennen jedoch nicht viele p
Potenzen ( positive ganze Zahlen), die Sie benötigen.
Dies ist Ihre Aufgabe: Finden Sie die minimale Anzahl von p
Potenzen, die sich summieren können n
.
Beispiele
>>> 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
Ein verwandter Wikipedia-Artikel zu diesem Problem, Warings Problem .
Regeln
Ihr Code muss ein Programm oder eine Funktion sein.
Die Eingabe erfolgt in zwei Ganzzahlen
n
undp
in beliebiger Reihenfolge. Sie können davon ausgehen, dass alle Eingaben gültig sind (n
ist eine positive ganze Zahl,p >= 2
Die Ausgabe ist eine Ganzzahl, die die Anzahl der Potenzen angibt, die summiert werden müssen
n
.Dies ist Codegolf, also gewinnt das kürzeste Programm , nicht unbedingt das effizienteste.
Alle eingebauten sind erlaubt.
Wie immer, wenn das Problem unklar ist, lassen Sie es mich bitte wissen. Viel Glück und gutes Golfen!
quelle
Antworten:
Pyth,
20 bis19 BytesGespeichert 1 Byte dank FryAmTheEggman.
Nimmt die Eingabe
p
zuerst und dann in zwei Zeilen vorn
.Probieren Sie es online aus. Testsuite.
Erläuterung
Der Code definiert eine rekursive Funktion
y(b)
, die das Ergebnis für zurückgibtmin_powers(b, p)
.quelle
Mathematica
6150 BytesMit 11 Bytes von LegionMammal978 gespeichert.
Wenn dieses Problem auf Potenzen zum Zählen von Zahlen beschränkt ist, ist es unkompliziert (in Mathematica). Wenn es um Potenzen von ganzen Zahlen erweitert wird, ist es ein Albtraum.
Testfälle
PowersRepresentationsp[n,k,p]
findet alle Fälle , in denenn
als eine Summe von ausgedrückt werdenk
zu der erhöhten positiven ganzen Zahlenp
-te Leistung.Beispielsweise,
Überprüfung,
quelle
Java -
183177 Bytes183 Bytes
Ungolfed
Ergebnis
quelle
p(32,2)
Gibt zurück,5
wann es zurückkehren soll2
(4^2 + 4^2 = 32
).Python 2, 66 Bytes
Versucht rekursiv, jeweils zu subtrahieren
p
Potenz zu , wodurch der Rest nicht negativ wird, berechnet seinen Wert für jeden Rest und nimmt das Minimum plus 1. Bei 0 wird 0 ausgegeben.Die hässliche Prüfung
if n/k**p
(entsprichtif k**p<=n
) soll verhindern, dass die Funktion ins Negative geht und versucht,min
die leere Liste zu übernehmen. Wenn es Python gibtmin([])=infinity
, wird dies nicht benötigt.quelle
C (gcc) , 122 Bytes
Probieren Sie es online!
quelle