Nous avons eu un défi de factorisation de premier ordre il y a quelque temps, mais ce défi remonte à près de six ans et répond à peine à nos exigences actuelles, donc je crois qu'il est temps d'en relever un nouveau.
Défi
Écrivez un programme ou une fonction qui prend en entrée un entier supérieur à 1 et génère ou renvoie une liste de ses facteurs premiers.
Règles
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode standard et dans n'importe quel format standard.
- Les facteurs en double doivent être inclus dans la sortie.
- La sortie peut être dans n'importe quel ordre.
- L'entrée ne sera pas inférieure à 2 ni supérieure à 2 31 - 1.
- Les fonctions intégrées sont autorisées, mais l'inclusion d'une solution non intégrée est encouragée.
Cas de test
2 -> 2
3 -> 3
4 -> 2, 2
6 -> 2, 3
8 -> 2, 2, 2
12 -> 2, 2, 3
255 -> 3, 5, 17
256 -> 2, 2, 2, 2, 2, 2, 2, 2
1001 -> 7, 11, 13
223092870 -> 2, 3, 5, 7, 11, 13, 17, 19, 23
2147483646 -> 2, 3, 3, 7, 11, 31, 151, 331
2147483647 -> 2147483647
Notation
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Réponses:
Pyth , 1 octet
J'aime les chances de Pyth dans ce défi.
la source
Python 2 , 55 octets
Essayez-le en ligne!
la source
Python 2, 53 octets
Essaie
i
tour à tour chaque diviseur potentiel . Sii
est un diviseur, l'ajoute et redémarre avecn/i
. Sinon, essaie le diviseur suivant. Les diviseurs étant vérifiés dans l'ordre croissant, seuls les premiers sont trouvés.En tant que programme, pour 55 octets:
la source
Mathematica,
3830 octetsMerci @MartinEnder pour 8 octets!
la source
FactorInteger[#][[All, 1]]&
? 26 octetsGelée , 2 octets
Essayez-le en ligne!
la source
Haskell , 48 octets
Essayez-le en ligne! Exemple d'utilisation:
(2%) 1001
rendements[7,11,13]
.la source
JavaScript (ES6), 44 octets
Horriblement inefficace en raison du fait qu'il itère de 2 jusqu'à chaque facteur premier, y compris le dernier. Vous pouvez réduire considérablement la complexité temporelle au prix de 5 octets:
la source
Cubix ,
3732 octetsEssayez-le en ligne! ou Regardez-le en action .
la source
En fait , 6 octets
Essayez-le en ligne!
Explication:
la source
o
maintenant, non?J, 2 octets
Le corps doit contenir au moins 30 caractères.la source
MATL , 2 octets
Essayez-le en ligne!
"Réponse intégrée ennuyeuse" obligatoire.
la source
Japt, 2 octets
Un intégré
k
utilisé sur l'entréeU
. Fait également référence à un pays.Testez-le en ligne!
la source
sourd , 3 octets
Ce langage est assez jeune et n'est pas encore vraiment prêt pour quelque chose de majeur, mais il peut faire une factorisation principale:
Cela attendra l'entrée de l'utilisateur, puis affichera la liste des facteurs premiers.
la source
MATLAB, 6 octets
Je pense que cela ne nécessite aucune explication.
la source
Bash + coreutils, 19 octets
Essayez-le en ligne!
la source
factor|sed s/.*://
. Aussifactor|cut -d: -f2
(oufactor|cut -d\ -f2
pour correspondre à votre sortie actuelle) a la même longueur d'octet mais va s'exécuter plus rapidement et utiliser moins de surcharge de mémoire.factor|cut -d\ -f2-
éliminer l'espace de tête, qui est un octet de plus.Lot, 96 octets
la source
Pyke, 1 octet
Essayez-le ici!
Facteurs premiers intégrés.
la source
Hexagonie , 58 octets
Pas encore joué au golf, mais @MartinEnder devrait quand même être capable de le détruire
Imprime les facteurs séparés par des espaces, avec un espace de fin
Golfé:
Disposition:
Explication à venir plus tard.
la source
05AB1E , 1 octet
Essayez-le en ligne!
la source
CJam, 2 octets
cjam.aditsu.net / ...
Ceci est une fonction. Martin, il me semble que j'avais sommeil.
la source
C, 92 octets
Version non golfée:
la source
Japt , 1 octet (non concurrent)
Essayez-le en ligne!
la source
PHP , 51 octets
Essayez-le en ligne!
la source
C (gcc) , 51 octets
Essayez-le en ligne!
la source
Perl 6 ,
7764 octetsEssayez-le
Essayez-le (Remarque: il ne dispose pas de suffisamment de temps pour terminer)
Une version beaucoup plus performante est légèrement plus longue à 100 octets.
Essayez-le
Développé: (version 64 octets)
la source
VB.NET, 86 octets
Avait cela assis autour de certains programmes Project Euler. Suppression des optimisations dans l'intérêt de la brièveté, et c'est le résultat. Naturellement, VB est très verbeux, il est donc assez long. Je ne compte pas le premier espace blanc. Il peut être omis, mais il est plus facile à lire avec.
Cela prend un entier comme paramètre et affiche les facteurs premiers avec une virgule après. Il y a une virgule de fin à la fin.
la source
Perl 6 , 51 octets
Une solution récursive:
la source
Java (OpenJDK) , 259 octets
Essayez-le en ligne!
la source
Rubis, 61 octets
La version intégrée la plus courte à laquelle je pouvais penser.
la source
Rubis , 48 octets
Essayez-le en ligne!
Un peu tard pour la fête, mais ... pourquoi pas?
la source