Étant donné un entier positif n> 1, déterminez combien de nombres peuvent être faits en ajoutant des entiers supérieurs à 1 dont le produit est n . Par exemple, si n = 24, nous pouvons exprimer n comme un produit de la manière suivante
24 = 24 -> 24 = 24
24 = 12 * 2 -> 12 + 2 = 14
24 = 6 * 2 * 2 -> 6 + 2 + 2 = 10
24 = 6 * 4 -> 6 + 4 = 10
24 = 3 * 2 * 2 * 2 -> 3 + 2 + 2 + 2 = 9
24 = 3 * 4 * 2 -> 3 + 4 + 2 = 9
24 = 3 * 8 -> 3 + 8 = 11
Nous pouvons obtenir les numéros suivants de cette façon:
24, 14, 11, 10, 9
C'est un total de 5 nombres, donc notre résultat est 5.
Tâche
Écrivez un programme ou une fonction qui prend n en entrée et renvoie le nombre de résultats pouvant être obtenus de cette façon.
Il s'agit d'une question de code-golf donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Séquence OEIS
code-golf
math
factoring
code-challenge
sequence
polyglot
rosetta-stone
code-golf
string
browser
code-golf
date
code-golf
base-conversion
code-challenge
cops-and-robbers
hello-world
code-golf
cops-and-robbers
hello-world
Ad Hoc Garf Hunter
la source
la source
2,2,3,3 -> 10
,2,6,3 -> 11
,2,2,9 -> 13
,12,3 -> 15
,2,18 -> 20
,36 -> 36
(2*3)+(2*3)=12
devrait également figurer dans la liste.Réponses:
Brachylog , 8 octets
Essayez-le en ligne!
Explication
Je ne sais pas exactement pourquoi
~×
ne produit que des listes avec des éléments supérieurs à 1, mais cela semble le faire, ce qui fonctionne très bien dans ce défi.la source
Gaia ,
91413 octetsBug corrigé au coût de 5 octets grâce à Jonathan Allan, puis 1 octet joué au golf.
Essayez-le en ligne! ou essayez comme suite de tests
Explication
la source
[6 6]
Gelée ,
11 1514 octets+4 octets corrigeant un bogue (peut-être une meilleure façon?)
-1 octet en abusant de la symétrie
Un lien monadique prenant et retournant des entiers positifs
Essayez-le en ligne! ou voir une suite de tests
Comment?
Mise à jour ...
la source
Python 2 , 206 octets
Essayez-le en ligne!
Explication
la source
Mathematica, 110 octets
la source
JavaScript (ES6) 107 octets
Non golfé:
Cas de test:
Afficher l'extrait de code
Pour vérifier que la fonction calcule les sommes correctes, nous pouvons sortir les clés de l'objet au lieu de
t
:la source
Python 3 , 251 octets
Essayez-le en ligne!
Le design est basique:
factoriser n en ses facteurs premiers (un facteur premier peut apparaître plusieurs fois:)
16 -> [2,2,2,2]
. Voilà la fonctionf
.calculer les partitions de la liste des facteurs premiers et multiplier les facteurs dans chaque partition. Les partitions se trouvent comme dans /programming//a/30134039 , et les produits sont calculés à la volée. Voilà la fonction
t
.La fonction finale obtient les produits de chaque partition de n et les additionne, pour obtenir le nombre de valeurs différentes.
Le résultat pour
2310=2*3*5*7*11
est49
.EDIT : Peut-être besoin de réparer, mais je n'ai pas le temps de le regarder maintenant (je suis pressé). Astuce: le résultat est-il correct
2310=2*3*5*7*11
? Je ne pense pas.EDIT2 : énorme correctif. Voir au dessus. La version précédente (buggy) était: Essayez-la en ligne!
f
calcule les facteurs (, avec un(0, n)
au lieu de(1, n)
comme premier élément.Le lambda divise chaque facteur en "sous-facteurs" et additionne ces "sous-facteurs".
la source