Une façon de représenter un nombre naturel consiste à multiplier les exposants des nombres premiers. Par exemple, 6 peut être représenté par 2 ^ 1 * 3 ^ 1, et 50 peut être représenté par 2 ^ 1 * 5 ^ 2 (où ^ indique une exponention). Le nombre de nombres premiers dans cette représentation peut aider à déterminer s'il est plus court d'utiliser cette méthode de représentation, par rapport à d'autres méthodes. Mais parce que je ne veux pas les calculer à la main, j'ai besoin d'un programme pour le faire pour moi. Cependant, parce que je devrai me souvenir du programme jusqu'à mon retour à la maison, il doit être aussi court que possible.
Ta tâche:
Écrivez un programme ou une fonction pour déterminer le nombre de nombres premiers distincts dans cette représentation d'un nombre.
Contribution:
Un entier n tel que 1 <n <10 ^ 12, pris par n'importe quelle méthode normale.
Production:
Le nombre de nombres premiers distincts qui sont requis pour représenter l'entrée, comme indiqué dans l'introduction.
Cas de test:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Il s'agit d' OEIS A001221 .
Notation:
C'est le code-golf , le score le plus bas en octets gagne!
la source
Réponses:
MATL ,
43 octets-1 octet grâce à Luis Mendo
Essayez-le en ligne!
Réponse originale:
Essayez-le en ligne!
Une vraie
Yfun
réponse.la source
05AB1E , 2 octets
une autre réponse assez ennuyeuse ...
Un programme complet acceptant une entrée numérique et imprimant le résultat
Essayez-le en ligne!
Comment?
la source
Mathematica, 7 octets
Ouais, il y a un intégré.
Mathematica, 21 octets
Le long chemin.
la source
Length@FactorInteger
pareil?Length@*FactorInteger
produit une fonction pure: la composition deLength
etFactorInteger
. Je peux définirfun=Length@*FactorInteger
puis appelerfun[1001]
. D'un autre côté,Length@FactorInteger
signifieraitLength[FactorInteger]
et évaluerait0
.Gaia , 2 octets
Encore une autre réponse assez ennuyeuse ... --- J. Allan
Essayez-le en ligne!
ḋ
- Factorisation principale sous forme de paires [prime, exposant] .l
- Longueur.la source
Python 2, 56 octets
la source
Rétine ,
3130 octetsL'entrée est unaire.
Merci à @MartinEnder pour le golf de 1 octet!
Essayez-le en ligne! (comprend un convertisseur décimal-unaire)
Comment ça fonctionne
Étant donné que le programme se compose d'une seule expression régulière avec le
&
modificateur, Retina compte simplement le nombre de correspondances qui se chevauchent . L'entrée est supposée être constituée de n répétitions de 1 et rien d'autre.L'anticipation négative
correspond à des emplacements entre 1 qui ne sont pas suivis par deux ou plusieurs 1 (
11+
), suivis par une ou plusieurs répétitions du même montant de 1 (\1+
), suivis de la fin de la saisie ($
).Tout nombre composite ab avec a, b> 1 peut être écrit comme b répétitions d' une répétition de 1 , de sorte que l'antichambre ne correspond qu'à des emplacements suivis de p répétitions de 1 , où p = 1 ou p est premier.
Le regex
s'assure que p> 1 en exigeant au moins deux 1 (
11+
) et stocke la queue de 1 dans le deuxième groupe de capture (\2
).Enfin, le regard positif derrière
vérifie que l'entrée entière consiste en kp occurrences ( k ≥ 1 ) de 1 , vérifiant que p divise l'entrée.
Ainsi, chaque correspondance correspond à un diviseur premier unique p .
la source
Utilitaires Bash + GNU, 33
Essayez-le en ligne .
Explication
la source
grep -Po ' \d+'
enregistre un octet de plustr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
échoue pour l'entrée 46 .Gelée , 3 octets
une réponse assez ennuyeuse ...
Un lien monadique prenant un numéro et renvoyant un numéro
Essayez-le en ligne!
Comment?
la source
Æv
?Æ
est le code alt 0198. 2. Vous pouvez configurer un clavier (je ne l'ai pas). 3. La page de codes.Ohm v2 , 2 octets
Essayez-le en ligne!
Les deux fonctions intégrées sont côte à côte dans la documentation lol.
la source
Gelée , 2 octets
Encore une autre réponse assez ennuyeuse ... --- J. Allan
Essayez-le en ligne!
Un intégré.
la source
Alice , 10 octets
Essayez-le en ligne!
Explication
Il s'agit simplement du cadre standard pour les programmes linéaires lourds en arithmétique qui nécessitent des E / S décimales. Le programme lui-même n'est alors que:
Qui fait:
la source
JavaScript 45 octets
* Pour @SEJPM, demandez une explication: ce que je fais ici est ceci - je vais de 2 - n (qui change, et sera finalement le plus grand facteur premier) - maintenant si le nombre actuel ne divise ni ne veut le compter qu'une seule fois (même bien qu'il puisse être un facteur de 2 * 2 * 2 * 3 - 2 est compté une fois) - donc le "j" vient à l'image, quand j n'est pas spécifié dans l'appel de la fonction - j recevra la valeur de " undefined ", et quand n% i == 0 alors j'appelle la fonction avec j = 1 dans le prochain appel) - et puis j'ajoute seulement 1 quand j est égal à undefined qui est! j + Function (n / i, i, ( j = 1 ou juste 1)). je ne change pas i dans ce domaine car il peut encore être divisible par i (2 * 2 * 3) mais alors j sera égal à 1 et il ne comptera pas comme un facteur. j'espère que je l'ai expliqué assez bien.
si le dernier nombre premier est très grand, il aura une pile d'appels maximale - si c'est un problème, je peux en faire un itératif
la source
CJam ,
75 octetsMerci à Martin Ender pour 2 octets!
Bloc anonyme (fonction) qui attend le numéro d'entrée sur la pile et le remplace par le numéro de sortie.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Brachylog , 3 octets
Essayez-le en ligne!
Explication
la source
Pyth, 3 octets
Suite de tests
Length (
l
) of set ({
) of prime factors (P
) of the input.la source
Husk, 3 bytes
Try it online!
Explanation
la source
Actually, 2 bytes
Yet another pretty boring answer... --- J. Allan
Try it online!
The first character can be replaced by
w
.la source
Pyke, 3 bytes
Try it here!
la source
Python 3,
6867 bytes1 byte removed thanks to @Mr.Xcoder
This times out for the largest test cases. Try it online!
la source
R + numbers,
3014 bytes16 bytes removed thanks to @Giuseppe
Also, here is the Try it online!! link per @Giuseppe.
la source
f=function(x)
and the(x)
asnumbers::omega
is a function already. However, asnumbers
is not standard for R, you should make your answer "R + numbers". Also, you should include a TIO link. Still, +1, very nice.MATL
solution is very nice (+1 yesterday).numbers::
. Otherwise, to me it's the same as using animport
in any other language.Convex, 3 bytes
Try it online!
la source
Pari/GP, 5 bytes
I don't know why it is called nu in Mathematica but omega in Pari/GP.
Try it online!
la source
Haskell, 58 bytes
-4 bytes thanks to @Laikoni
Try it online!
Explanation
Essentially generates all primes at most as large as
n
and filters them for being a factor of n and then takes the length of the result.la source
sum[1|x<- ... ]
instead oflength
.Japt,
54 bytesTry it
Get the divisors (
â
) and count (è
) the primes (j
).la source
ARBLE, 28 bytes
Try it online!
This is a very literal solution
la source
Dyalog APL, 17 bytes
Try it online!
la source
Python 2,
6355 bytesA much more interesting answer...
-8 bytes thanks to Jonathan Frech (use an argument with a default for the post-adjustment of the result of primes from
0
to1
-- much better than a wrapping lambda!!)A recursive function taking a positive integer,
n
, and returning a positive integer, the count.Try it online! Really inefficient, don't even bother with the other test cases.
la source
J, 12 bytes
q:
is J's prime exponents function, giving it the argument__
produces a matrix whose first row is all nonzero prime factors and whose 2nd row is their exponents.We take the shape
$
of that matrix -- rows by columns -- the number of columns is the answer we seek.{:
gives us the last item of this two items (num rows, num columns) list, and hence the answer.Try it online!
la source
Java (OpenJDK 9), 67 bytes
Try it online!
la source
Javascript ES6, 56 chars
Test:
la source