Biorąc pod uwagę liczby całkowite N , P > 1
, znajdź największą liczbę całkowitą M
taką, że P ^ M ≤ N
.
I / O:
Dane wejściowe podano jako 2 liczby całkowite N
i P
. Wyjście będzie liczbą całkowitą M
.
Przykłady:
4, 5 -> 0
33, 5 -> 2
40, 20 -> 1
242, 3 -> 4
243, 3 -> 5
400, 2 -> 8
1000, 10 -> 3
Uwagi:
Dane wejściowe zawsze będą prawidłowe, tzn. Zawsze będą liczbami całkowitymi większymi niż 1.
Kredyty:
Nazwa pochodzi od @cairdcoinheringaahing. Ostatnie 3 przykłady pochodzą od @Nitrodon, a zasługą za ulepszenie opisu jest @Giuseppe.
code-golf
math
number
arithmetic
Muhammad Salman
źródło
źródło
Odpowiedzi:
Brain-Flak , 74 bajty
Wypróbuj online!
Wykorzystuje to tę samą koncepcję, co standardowy algorytm dodatniej liczby całkowitej Brain-Flaka.
źródło
JavaScript (ES6), 22 bajty
Zaoszczędź 8 bajtów dzięki @Neil
Pobiera dane wejściowe w składni curry
(p)(n)
.Wypróbuj online!
źródło
Excel, 18 bajtów
Przyjmuje wejście „n” w A1, a wejście „p” w A2.
źródło
INT
funkcji zamiastTRUNC
zaoszczędzić 2 bajty.Galaretka , 3 bajty
To nie używa arytmetyki zmiennoprzecinkowej, więc nie ma problemów z precyzją.
Wypróbuj online!
Jak to działa
źródło
Retina 0.8.2 , 35 bajtów
Wypróbuj online! Wyjaśnienie:
Konwertuj argumenty na jednoargumentowe.
Jeśli drugi argument dzieli pierwszy, zastąp pierwszy argument wynikiem
#
plus liczby całkowitej, odrzucając resztę. Powtarzaj to, aż pierwszy argument będzie mniejszy niż drugi.Policz liczbę uruchomień pętli.
źródło
Japt, 8 bajtów
Spróbuj
źródło
F.g()
- ale są one niezwykle przydatne.Haskell , 30 bajtów
Wypróbuj online!
źródło
until((>n).(p^))(1+)0-1
albountil(\x->p^x*p>n)(1+)0
obniży cię do 27 bajtów.Perl 6 , 13 bajtów
Wypróbuj online!
Łączenie składające się z dziennika i podłogi, domyślnie zawiera 2 argumenty, ponieważ dziennik pierwszej funkcji oczekuje 2. Wynik jest funkcją.
źródło
1000, 10
zwraca 2.Haskell , 16 bajtów
Wypróbuj online!
Haskell został zaprojektowany przez matematyków, więc ma ładny zestaw funkcji matematycznych w Preludium.
źródło
R , 25 bajtów
Wypróbuj online!
Weź dziennik
P
bazyN
i dokonaj podziału liczb całkowitych1
, ponieważ jest on krótszy niżfloor()
. Trochę to cierpi z powodu precyzji numerycznej, więc przedstawiam również poniższą odpowiedź, która nie powinna, oprócz ewentualnego przepełnienia liczb całkowitych.R , 31 bajtów
Wypróbuj online!
źródło
p
odpowiedźp+.1
w 25 bajtach i nadal będziesz w porządku, za 28 bajtówPython 2 , 39 bajtów
Wypróbuj online!
źródło
Rubinowy , 31 bajtów
OK, więc wszystkie te podejścia oparte na logach są podatne na błędy zaokrąglania, więc oto inna metoda, która działa z liczbami całkowitymi i jest wolna od tych problemów:
Wypróbuj online!
Ale wracając do logarytmów, chociaż nie jest jasne, do jakiej precyzji musimy wesprzeć dane wejściowe, myślę jednak, że ta mała sztuczka rozwiązałaby problem zaokrąglania dla wszystkich mniej lub bardziej „realistycznych” liczb:
Ruby , 29 bajtów
Wypróbuj online!
źródło
C (gcc) +
-lm
, 24 bajtyWypróbuj online!
źródło
long long
czym, ale co to jestbytes bytes
? : Pf(n,m){n=(float)log(n)/log(m);}
wydaje się działać @ 31 bajtówEmojicode ,
4948 bajtówWypróbuj online!
źródło
APL (Dyalog Unicode) , 2 bajty
Wypróbuj online!
Całkiem proste.
⍟
Log⌊
piętroźródło
⌊⍟
05AB1E , 6 bajtów
Wypróbuj online!
źródło
JavaScript ,
4033 bajtów-3 bajty dzięki DanielIndie
Pobiera dane wejściowe w składni curry.
Wypróbuj online!
źródło
toString
Rozwiązanie działa tylko dla baz do 36.Pari / GP, 6 bajtów
(wbudowany dodany w wersji 2.7, marzec 2014. Bierze dwa argumenty, z opcjonalnym trzecim odniesieniem, które, jeśli jest obecne, jest ustawione na podstawę podniesioną do wyniku)
źródło
logint
co jest prawidłowe i liczy 5 bajtów mniej.Python 2, 3, 46 bajtów
-1 dzięki jonathan
Python 1, 47 bajtów
źródło
n~-i
jest o jeden bajt krótszy niżn i-1
.JavaScript (Node.js) , 22 bajty
Wypróbuj online!
Cururs funkcja rekurencyjna. Użyj jako
g(P)(N)
. Mniej podatny na błędy zmiennoprzecinkowe niż używanieMath.log
i (uważam) kod podaje poprawne wartości, o ile oba wejścia są bezpiecznymi liczbami całkowitymi (poniżej2**52
).źródło
Haskell ,
3534 bajtówDzięki @Laikoni za uratowanie 1 bajtu
Wypróbuj online!
źródło
J , 5 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica)
1510 bajtów(wymaga odwróconej kolejności na wejściu)
Oryginalne zgłoszenie
źródło
⌊Log@##⌋&
jest o jeden bajt krótszyDalej (gforth) , 35 bajtów
Wypróbuj online!
Można zapisać 5 bajtów poprzez zamianę oczekiwanych parametrów wejściowych, ale pytanie określa, że N musi być pierwsze (można argumentować, że w języku postfiksowym „Pierwszy” oznacza górę stosu, ale pozostanę przy literze reguł dla teraz)
Wyjaśnienie
źródło
Pyth,
64 bajtyZaoszczędź 2 bajty dzięki Mmenomic
Wypróbuj online
Jak to działa
.l
to log B (A)Szczerze mówiąc, nie mam pojęcia, jak to
F
działa. Ale jeśli to działa, to działa.s
obcina liczbę zmiennoprzecinkową do liczby całkowitej, aby dać nam najwyższą liczbę całkowitąM
.źródło
/FlM
Cud , 9 bajtów
Przykładowe użycie:
Wyjaśnienie
Pełna wersja:
Jest to napisane bezsensownie.
sS
przekazuje elementy listy jako argumenty do funkcji (w tym przypadku,log
).źródło
Gforth , 31 bajtów
Stosowanie
Wypróbuj online!
Wyjaśnienie
Niestety FORTH używa dedykowanego stosu zmiennoprzecinkowego. W tym celu muszę
SWAP
(wymienić) wartości wejściowe, aby dotarły do stosu zmiennoprzecinkowego w odpowiedniej kolejności. Muszę także przenieść wartości na ten stosS>F
. Podczas przenoszenia wyniku zmiennoprzecinkowego z powrotem na liczbę całkowitą (F>S
), mam tę zaletę, że otrzymuję obcięcie za darmo.Krótsza wersja
Rozciągając wymagania i wprowadzając dane w formacie zmiennoprzecinkowym oraz we właściwej kolejności, istnieje krótsza wersja z 24 bajtami.
Wypróbuj online!
źródło
: f .... ;
albo przekonwertowana na program, który pobiera dane wejściowe przy użyciuKEY
lubACCEPT
Łuska ,
874 bajtówWypróbuj online!
źródło
C (gcc) , 61 bajtów
Wypróbuj online!
źródło
Japt , 5 bajtów
Wypróbuj online!
8 bajtów
Wypróbuj online!
źródło
ì
zamiasts
jaks
nie powiedzie się, jeśliV>36
.V>36
.