Otrzymujesz nieujemną liczbę całkowitą n
i liczbę całkowitą p >= 2
. Musisz dodać razem p
-te moce ( p=2
oznacza kwadraty, p=3
oznacza sześciany), aby je zdobyć n
. Dzieje się tak zawsze dla każdej nieujemnej n
, ale nie znasz wielu p
potęg (jakiejkolwiek dodatniej liczby całkowitej), których potrzebujesz.
Oto twoje zadanie: znajdź minimalną liczbę p
-tych mocy, które można sumować n
.
Przykłady
>>> 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
Powiązany artykuł w Wikipedii na temat tego problemu, problemu Waringa .
Zasady
Twój kod musi być programem lub funkcją.
Wejście to dwie liczby całkowite
n
ip
w dowolnej kolejności. Możesz założyć, że wszystkie dane wejściowe są prawidłowe (n
dowolna dodatnia liczba całkowita,p >= 2
Dane wyjściowe to liczba całkowita reprezentująca liczbę potęg potrzebnych do sumowania
n
.To jest golf golfowy, więc wygrywa najkrótszy program , niekoniecznie najbardziej wydajny.
Wszelkie wbudowane elementy są dozwolone.
Jak zawsze, jeśli problem jest niejasny, daj mi znać. Powodzenia i dobrej gry w golfa!
źródło
Odpowiedzi:
Pyth,
2019 bajtówZaoszczędzono 1 bajt dzięki FryAmTheEggman.
Pobiera dane wejściowe w dwóch wierszach,
p
najpierw, a następnien
.Wypróbuj online. Zestaw testowy.
Wyjaśnienie
Kod definiuje funkcję rekurencyjną,
y(b)
która zwraca wynikmin_powers(b, p)
.źródło
Mathematica
6150 bajtówZ 11 bajtami zapisanymi przez LegionMammal978.
Problem ograniczony do mocy liczenia liczb jest prosty (w matematyce). Po rozszerzeniu o moc liczb całkowitych jest to koszmar.
Przypadki testowe
PowersRepresentationsp[n,k,p]
znajduje wszystkie przypadki, w którychn
można wyrazić jako sumęk
liczb całkowitych dodatnich podniesionych dop
-tej potęgi.Na przykład,
Kontrola,
źródło
Java -
183177 bajtów183 bajtów
Nie golfił
Wynik
źródło
p(32,2)
zwraca,5
kiedy powinien zwrócić2
(4^2 + 4^2 = 32
).Python 2, 66 bajtów
Rekurencyjnie próbuje odjąć każdą
p
-tą moc, która pozostawia resztę nieujemną, obliczając jej wartość na każdej pozostałej i przyjmując minimum plus 1. Przy 0, wyjścia 0.Brzydka kontrola
if n/k**p
(odpowiednikif k**p<=n
) polega na powstrzymaniu funkcji przed przejściem do przeczeń i próbą przejęciamin
pustej listy. Jeśli Python takmin([])=infinity
, nie byłoby to potrzebne.źródło
C (gcc) , 122 bajty
Wypróbuj online!
źródło