Eine einfache, aber hoffentlich nicht ganz triviale Herausforderung:
Schreiben Sie ein Programm oder eine Funktion, die die k
Potenzen einer Zahl aufaddiert n
. Genauer:
- Eingabe: zwei positive ganze Zahlen
n
undk
(oder ein geordnetes Paar von ganzen Zahlen usw.) - Ausgang: die Summe aller positiven Teiler ,
n
dass sindk
ten Potenzen von ganzen Zahlen
Zum Beispiel 11! = 39916800 hat sechs Divisoren , die Würfel sind, nämlich 1, 8, 27, 64, 216 und 1728. Daher gegebenen Eingänge 39916800
und 3
, sollte das Programm ihre Summe zurückkehren 2044
.
Andere Testfälle:
{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
Dies ist Codegolf. Je kürzer Ihr Code, desto besser. Ich freue mich über Golfcode in allen möglichen Sprachen, auch wenn eine andere Sprache mit weniger Bytes auskommt als Ihre.
code-golf
arithmetic
number-theory
integer
Greg Martin
quelle
quelle
Antworten:
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
Beispiel Eingabe
46656, 3
quelle
Mathematica, 28 Bytes
Unbenannte Funktionen nehmen
n
undk
als Eingaben in dieser Reihenfolge.quelle
DivisorSum
ist frustrierend nahe daran, hier nützlich zu sein.Haskell ,
37 3534 BytesProbieren Sie es online! Verwendung:
Der Code ist ziemlich ineffizient, da er immer berechnet
1^k, 2^k, ..., n^k
.Bearbeiten: Ein Byte dank Zgarb gespeichert.
Erläuterung:
quelle
mod n(x^k)
kann seinn`mod`x^k
.Python 2,
5452 BytesVielen Dank an @Rod für das Abschneiden von 2 Bytes.
quelle
x%i**n==0
mitx%i**n<1
, und auf der anderen Seite bewegeni**n*(x%i**n<1)
Ruby, 45 Bytes
Wäre kürzer mit "sum" in Ruby 2.4. Zeit für ein Upgrade?
quelle
MATL , 10 Bytes
Probieren Sie es online!
Wie es funktioniert
Beispiel mit
46656
,6
.quelle
Gelee ,
76 Bytes-1 Byte dank Dennis (durchqueren eines impliziten Bereichs)
Eine clevere Effizienzersparnis auch von Dennis zu 0-Byte-Kosten
(Bisher
ÆDf*€S
würden Filter jene Divisoren behalten, die eine Potenz von k einer beliebigen natürlichen Zahl bis n sind . Beachten Sie jedoch, dass n kann habe immer nur einen Teiler von i k, wenn es trotzdem einen Teiler von i hat!)Probieren Sie es online!
Wie?
quelle
JavaScript (ES7),
5653 ByteTakes
n
undk
in currying Syntax(n)(k)
.Testfälle
Code-Snippet anzeigen
quelle
Perl 6 , 39 Bytes
Wie es funktioniert
Versuch es
quelle
Japt , 10 Bytes
Dank @ETHproductions wurden viele Bytes gespeichert
Erläuterung
Online testen!
quelle
vU
teilbareU
oder teilbare ZahlenU
?fvU
filtert nach Elementen, die durch teilbar sindU
.f!vU
Filtert nach Elementen,U
die durch teilbar sind.!
tauscht die Argumente aus.Scala 63 Bytes
quelle
Python 2 , 50 Bytes
Probieren Sie es online! Große Eingaben können je nach System und Implementierung die Rekursionstiefe überschreiten.
quelle
JavaScript (ES7),
4946 Bytesquelle
n=>k=>
? +1.i
als lokal, was 4 zusätzliche Bytes kostet, und vergaß, dass ichi
auf die gleiche Weise missbrauchen konnte , wie ich es mit meiner anderen Formulierung getan habe.)PHP, 86 Bytes
Probieren Sie es hier aus!
Nervenzusammenbruch :
quelle
for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;
59 Bytes; benötigt PHP 5.6 oder neuer.CJam , 20 Bytes
Wahrscheinlich nicht optimal golfen, aber ich sehe keine offensichtlichen Änderungen, die vorgenommen werden müssten ...
Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online!
( Gutschrift nicht meins. )
quelle
Bash + Unix-Dienstprogramme, 44 Bytes
Probieren Sie es online!
Testläufe:
quelle
Python , 56 Bytes
Probieren Sie es online!
Ziemliech direkt. Das einzig Bemerkenswerte ist, dass
j**k**-1%1
immer ein Float in [0,1] zurückgegeben wird, währendn%j
immer eine nicht negative ganze Zahl zurückgegeben wird. Sie können also nur gleich sein, wenn beide 0 sind .quelle
Batch, 138 Bytes
Da Batch keinen Netzbetreiber hat, missbrauche ich
set/a
als eine Form voneval
. Sehr langsam wennk=1
. Die 32-Bit-Ganzzahlarithmetik begrenzt die unterstützten Werte vonn
undk
:quelle
R, 28 Bytes direkt, 43 Bytes für die Funktion
wenn n, k im Speicher:
für eine Funktion:
quelle