Un défi simple mais espérons-le, pas tout à fait trivial:
Ecrivez un programme ou une fonction qui additionne les k
puissances divisant un nombre n
. Plus précisement:
- Entrée: deux entiers positifs
n
etk
(ou une paire ordonnée d’entiers, etc.) - Sortie: la somme de tous les diviseurs positifs de
n
qui sont lesk
puissances des nombres entiers
Par exemple, 11! = 39916800 a six diviseurs qui sont cubes, à savoir 1, 8, 27, 64, 216 et 1728. Par conséquent les entrées données 39916800
et 3
, le programme devrait retourner leur somme, 2044
.
Autres cas de test:
{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
C'est du code golf, donc plus votre code est court, mieux c'est. Je souhaite la bienvenue au code golfé dans toutes sortes de langues, même si une autre langue peut s’en tirer avec moins d’octets que le vôtre.
code-golf
arithmetic
number-theory
integer
Greg Martin
la source
la source
Réponses:
05AB1E , 9 octets
Essayez-le en ligne!
Explication
Exemple d'entrée
46656, 3
la source
Mathematica, 28 octets
Fonction sans nom prenant
n
etk
comme entrées dans cet ordre.la source
DivisorSum
est frustrant d’être utile ici.Haskell ,
37 3534 octetsEssayez-le en ligne! Usage:
Le code est assez inefficace car il calcule toujours
1^k, 2^k, ..., n^k
.Edit: enregistré un octet grâce à Zgarb.
Explication:
la source
mod n(x^k)
peut êtren`mod`x^k
.Python 2,
5452 octetsMerci @Rod d'avoir coupé 2 octets.
la source
x%i**n==0
parx%i**n<1
, et passer de l'autre côté commei**n*(x%i**n<1)
Ruby, 45 octets
Serait plus court en utilisant "somme" dans Ruby 2.4. Temps de mise à niveau?
la source
MATL , 10 octets
Essayez-le en ligne!
Comment ça marche
Exemple avec
46656
,6
.la source
Gelée ,
7 à6 octets-1 octet grâce à Dennis (traversent une gamme implicite)
Une efficacité intelligente sauver aussi par Dennis à coût 0 octet
(Auparavant
ÆDf*€S
filtrerait garder ces diviseurs qui sont une puissance de k d'un nombre naturel jusqu'à n . Mais notez que n peut N'avoir un diviseur de i k que s'il a un diviseur de i !)Essayez-le en ligne!
Comment?
la source
JavaScript (ES7),
5653 octetsPrend
n
etk
en currying syntaxe(n)(k)
.Cas de test
Afficher l'extrait de code
la source
Perl 6 , 39 octets
Comment ça marche
L'essayer
la source
Japt , 10 octets
Économisez beaucoup d'octets grâce à @ETHproductions
Explication
Testez-le en ligne!
la source
vU
les nombres divisibles parU
, ou les nombres qui divisentU
?fvU
filtre les éléments divisibles parU
;f!vU
filtre sur les éléments quiU
est divisible par.!
échange les arguments.Scala 63 octets
la source
Python 2 , 50 octets
Essayez-le en ligne! Les entrées importantes peuvent dépasser la profondeur de récursivité en fonction de votre système et de son implémentation.
la source
JavaScript (ES7),
4946 octetsla source
n=>k=>
? +1i
tant que local, ce qui coûte 4 octets supplémentaires, et j'ai oublié que je pouvais abuseri
de la même manière que je le faisais avec mon autre formulation.)PHP, 86 octets
Essayez-le ici!
Panne :
la source
for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;
59 octets; nécessite PHP 5.6 ou une version ultérieure.CJam , 20 octets
Probablement pas au golf optimal, mais je ne vois pas de changements évidents à faire ...
Essayez-le en ligne!
la source
Gelée , 8 octets
Essayez-le en ligne!
( Crédit pas le mien. )
la source
Utilitaires Bash + Unix, 44 octets
Essayez-le en ligne!
Tests effectués:
la source
Python , 56 octets
Essayez-le en ligne!
Assez simple. La seule chose à noter est que
j**k**-1%1
renvoie toujours un float dans [0,1) etn%j
toujours un entier non négatif, de sorte qu'ils ne peuvent être égaux que si les deux sont égaux à 0 .la source
Lot, 138 octets
Depuis lot ne dispose pas d' un opérateur de pouvoir, j'abuser
set/a
comme une forme deeval
. Très lent quandk=1
. L'arithmétique entière sur 32 bits limite les valeurs prises en charge den
etk
:la source
R, 28 octets directs, 43 octets pour la fonction
si n, k en mémoire:
pour une fonction:
la source