Défi
Étant donné un entier positif, renvoyez le produit de ses diviseurs, y compris lui-même.
Il s'agit de la séquence A007955 dans l'OEIS .
Cas de test
1: 1 2: 2 3: 3 4: 8 5: 5 6: 36 7: 7 8: 64 9: 27 10: 100 12: 1728 14: 196 24: 331776 25: 125 28: 21952 30: 810000
Notation
C'est le code-golf , donc la réponse la plus courte dans chaque langue gagne!
Réponses:
05AB1E , 2 octets
Essayez-le en ligne!
Explication
la source
Japt , 3 octets
Essayez-le en ligne!
Explication
la source
â
et×
en écrivant cette réponseGelée , 3 octets
Essayez-le en ligne!
la source
MATL , 3 octets
Essayez-le en ligne!
la source
Python 3 ,
4241 octets1 octet enregistré grâce à Leaky Nun!
Essayez-le en ligne!
la source
(1,k)[i%k<1]
est équivalent àk**(i%k<1)
Haskell ,
3534 octets-1 grâce aux ovs
Essayez-le en ligne!
la source
Pyth , 6 octets
Suite de tests .
la source
Alice , 12 octets
Essayez-le en ligne!
Explication
Ceci est juste le cadre normal des E / S décimales:
Ensuite, le programme est:
la source
Neim , 2 octets
Essayez-le en ligne!
la source
R , 28 octets
Essayez-le en ligne!
la source
Code machine x86-64, 26 octets
Le code ci-dessus définit une fonction qui prend un seul paramètre (la valeur d'entrée, un entier positif) dans
EDI
(suivant la convention d'appel System V AMD64 utilisée sur Gnu / Unix), et renvoie un seul résultat (le produit des diviseurs) dansEAX
.En interne, il calcule le produit des diviseurs en utilisant un algorithme itératif (extrêmement inefficace), similaire à la soumission C de pizzapants184 . Fondamentalement, il utilise un compteur pour parcourir toutes les valeurs comprises entre 1 et la valeur d'entrée, vérifiant si la valeur actuelle du compteur est un diviseur de l'entrée. Si c'est le cas, il multiplie cela dans le produit total en cours d'exécution.
Mnémoniques non assemblés du langage d'assemblage:
Le fait que l'
IDIV
instruction utilise des opérandes codés en dur pour le dividende restreint un peu mon style, mais je pense que c'est assez bon pour un langage qui n'a pas de fonction intégrée mais des branches arithmétiques et conditionnelles de base!la source
TI-Basic (TI-84 Plus CE), 24 octets
Programme complet: invite l'utilisateur à entrer; renvoie la sortie dans
Ans
, une variable spéciale qui stocke (fondamentalement) la valeur de la dernière valeur calculée.Explication:
la source
C (gcc),
5248 octets-4 octets grâce à Cody Gray
Une fonction qui prend un entier et retourne le produit de ses diviseurs.
Essayez-le en ligne!
Non golfé:
la source
p*=
expression et (3) mettant une instruction dans le corps de lafor
boucle pour supprimer une virgule. J'aime aussi utiliser des variables globales, plutôt que d'ajouter des paramètres supplémentaires. Cela évite un comportement indéfini, sans coûter aucun octet. Version finale:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
return p;
avecp=p;
et enregistrer cinq octets.p,a;f(x)
parf(x,p,a)
.return p;
et enregistrer non pas cinq, mais neuf octets. ( TIO )JavaScript (ES7), 32 octets
Sauvegardé quelques octets en empruntant le conseil de Leaky sur la solution Python de musicman .
Essayez-le
Alternative (ES6), 32 octets
la source
(n%i?1:i)
? (Cela ne sauvera cependant aucun octet.)TI-Basic,
241413 octets1 octet enregistré grâce au lirtosiast
la source
int(
?QBIC , 22 octets
Explication
la source
Pari / GP , 18 octets
Essayez-le en ligne!
la source
PHP , 45 octets
Essayez-le en ligne!
la source
Mathematica, 17 octets
pour ceux qui ne peuvent pas voir les réponses supprimées (réponse de DavidC), voici le code de Mathematica avec l'aide de @MartinEnder
la source
Langage de programmation Shakespeare , 353 octets
Version non golfée:
J'utilise ce compilateur SPL pour exécuter le programme.
Courir avec:
la source
Python 3, 45 octets
lambda _:_**(sum(_%-~i<1for i in range(_))/2)
Soit
x
un nombre. Les deuxy
etz
seront les diviseurs dex
ify * z = x
. Par conséquent,y = x / z
. Disons un certain nombred
a 6 divisiors, en raison de cette observation seront les diviseursa
,b
,c
,d / a
,d / b
,d / b
. Si nous multiplions tous ces nombres (le point du puzzle), nous obtenonsd * d * d = d ^ 3
. En général, poure
un certain nombre def
diviseurs, le produit de ces diviseurs serae ^ (f / 2)
, ce que fait le lambda.Essayez-le en ligne!
la source
MY , 4 octets
Hex:
Explication:
la source
Java (OpenJDK 8) ,
5251 octetsEssayez-le en ligne!
Merci LeakyNun pour avoir sauvé 1 octet!
la source
n->{int r=n,d=0;for(;++d<n;)r*=n%d<1?d:1;return r;}
RProgN 2 , 2 octets
Une autre langue avec des ins intégré pour
divisors
etproduct
.Essayez-le en ligne!
la source
Perl 6 , 22 octets
Essayez-le en ligne!
la source
J, 19 octets
Explication à venir plus tard ...
Essayez-le en ligne!
la source
Octave , 27 octets
Cela définit une fonction anonyme.
Essayez-le en ligne!
la source
Python 2 ,
5250 octetsm*=n%i>0 or i
Essayez-le en ligne!
la source
Fortran 95, 88 octets
Essayez-le en ligne!
Non golfé:
la source
Axiome, 23 octets
Ceci est une traduction dans Axiom de la solution alephalpha
la source