Proste, ale miejmy nadzieję, nie całkiem trywialne wyzwanie:
Napisz program lub funkcję, która sumuje k
potęgę dzielącą liczbę n
. Dokładniej:
- Dane wejściowe: dwie dodatnie liczby całkowite
n
ik
(lub uporządkowana para liczb całkowitych itp.) - Wyjście: suma wszystkich dodatnich dzielników
n
tego sąk
potęgami liczb całkowitych
Na przykład 11! = 39916800 ma sześć dzielniki które są kostki, mianowicie 1, 8, 27, 64, 216 i 1728 W związku z danymi wyjściowymi 39916800
i 3
program powinien zwracać Sum 2044
.
Inne przypadki testowe:
{40320, 1} -> 159120
{40320, 2} -> 850
{40320, 3} -> 73
{40320, 4} -> 17
{40320, 5} -> 33
{40320, 6} -> 65
{40320, 7} -> 129
{40320, 8} -> 1
{46656, 1} -> 138811
{46656, 2} -> 69700
{46656, 3} -> 55261
{46656, 4} -> 1394
{46656, 5} -> 8052
{46656, 6} -> 47450
{46656, 7} -> 1
{1, [any positive integer]} -> 1
To jest golf golfowy, więc im krótszy kod, tym lepiej. Z zadowoleniem przyjmuję kod do gry w golfa we wszystkich różnych językach, nawet jeśli jakiś inny język może uciec z mniejszą liczbą bajtów niż twój.
code-golf
arithmetic
number-theory
integer
Greg Martin
źródło
źródło
Odpowiedzi:
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Przykładowe dane wejściowe
46656, 3
źródło
Mathematica, 28 bajtów
Pobieranie nienazwanej funkcji
n
ik
jako dane wejściowe w tej kolejności.źródło
DivisorSum
jest frustrująco bliski przydatności w tym przypadku.Haskell ,
37 3534 bajtówWypróbuj online! Stosowanie:
Kod jest dość nieefektywny, ponieważ zawsze się oblicza
1^k, 2^k, ..., n^k
.Edycja: Zapisano jeden bajt dzięki Zgarbowi.
Wyjaśnienie:
źródło
mod n(x^k)
może byćn`mod`x^k
.Python 2,
5452 bajtyDzięki @Rod za odcięcie 2 bajtów.
źródło
x%i**n==0
zx%i**n<1
, i przejść na drugą stronę, jaki**n*(x%i**n<1)
Rubinowy, 45 bajtów
Byłoby krótsze przy użyciu „sum” w Ruby 2.4. Czas na aktualizację?
źródło
MATL , 10 bajtów
Wypróbuj online!
Jak to działa
Przykład z
46656
,6
.źródło
Galaretka ,
76 bajtów-1 bajt dzięki Dennisowi (przemieść ukryty zakres)
Sprytna efektywność oszczędzana również przez Dennisa przy koszcie 0 bajtów
(Wcześniej
ÆDf*€S
filtrowałby te dzielniki, które są potęgą k dowolnej liczby naturalnej do n . Ale zauważ, że n może tylko dzielnik i k tylko wtedy, gdy ma dzielnik i !)Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES7),
5653 bajtówTrwa
n
ik
w currying składni(n)(k)
.Przypadki testowe
Pokaż fragment kodu
źródło
Perl 6 , 39 bajtów
Jak to działa
Spróbuj
źródło
Japt , 10 bajtów
Zaoszczędzono wiele bajtów dzięki produktom @ETH
Wyjaśnienie
Przetestuj online!
źródło
vU
wykrywa liczby podzielne przezU
lub liczby dzieląceU
?fvU
filtruje do elementów, które można podzielićU
;f!vU
filtry do elementów, któreU
można podzielić.!
zamienia argumenty.Scala 63 bajty
źródło
Python 2 , 50 bajtów
Wypróbuj online! Duże nakłady mogą przekraczać głębokość rekurencji w zależności od systemu i implementacji.
źródło
JavaScript (ES7),
4946 bajtówźródło
n=>k=>
? +1.i
jako lokalny, który kosztuje 4 dodatkowe bajty, i zapomniałem, że mogę nadużywaći
w taki sam sposób, jak to robiłem z moim innym sformułowaniem.)PHP, 86 bajtów
Wypróbuj tutaj!
Awaria :
źródło
for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;
59 bajtów; wymaga PHP 5.6 lub nowszego.CJam , 20 bajtów
Prawdopodobnie nie jest optymalnie golfowy, ale nie widzę żadnych oczywistych zmian, aby wprowadzić ...
Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online!
( Kredyt nie mój ).
źródło
Narzędzia Bash + Unix, 44 bajty
Wypróbuj online!
Przebiegi testowe:
źródło
Python , 56 bajtów
Wypróbuj online!
Dość bezpośredni. Jedyną godną uwagi rzeczą jest to, że
j**k**-1%1
zawsze zwraca liczbę zmiennoprzecinkową w [0,1), an%j
zawsze zwraca nieujemną liczbę całkowitą, więc mogą być równe tylko wtedy, gdy oba są równe 0 .źródło
Partia, 138 bajtów
Ponieważ Batch nie ma operatora mocy, nadużywam
set/a
jako formyeval
. Bardzo wolno kiedyk=1
. 32-bitowa arytmetyka liczb całkowitych ogranicza obsługiwane wartościn
ik
:źródło
R, 28 bajtów bezpośrednio, 43 bajty na funkcję
jeśli n, k w pamięci:
dla funkcji:
źródło