J'ai vu un autre défi majeur arriver dans PPCG, et je m'aime quelques premiers. Ensuite, j'ai mal lu le texte d'introduction et je me suis demandé ce que les cerveaux créatifs avaient trouvé ici.
Il s'avère que la question posée était triviale, mais je me demande si c'est la même chose pour la question que j'ai (mal) lue:
6 peut être représenté par 2 ^ 1 * 3 ^ 1, et 50 peut être représenté par 2 ^ 1 * 5 ^ 2 (où ^ indique l'exonération).
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 les facteurs premiers uniques de n.
Cas de test:
Input Factorisation Unique primes in factorisation representation
24 2^3*3^1 2 (2, 3)
126 2^1*3^2*7^1 3 (2, 3, 7)
8 2^3 2 (2, 3)
64 2^6 1 (2) (6 doesn't get factorised further)
72 2^3*3^2 2 (2, 3)
8640 2^6*3^3*5^1 3 (2, 3, 5)
317011968 2^11*3^5*7^2*13^1 6 (2, 3, 5, 7, 11, 13)
27 3^3 1 (3)
Ce n'est pas une séquence OEIS.
Notation:
C'est le code-golf , le score le plus bas en octets gagne!
64
? Est-ce2 (2,3)
(comme 6 peut être représenté comme 2 * 3) ou1 (2)
(ignorez le 6)?64
le résultat attendu est 1 (2). J'aime l'idée de le faire récursivement, mais ce n'est pas ainsi que je lis la question d'origine. Je pensais que8640
c'était un cas de test approprié, mais aurait dû être plus explicite - merci.Réponses:
Mathematica, 39 octets
Essayez-le en ligne!
merci à Martin Ender (-11 octets)
la source
Cases
s'avère être plus court queSelect
(-4 octets):Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&
(passe tous les cas de test sur un nouveau noyau)Count[Union@@FactorInteger@#,_?PrimeQ]&
? (N'ont pas vérifié tous les cas de test.)05AB1E ,
97 octetsEnregistré 2 octets grâce à Kevin Cruijssen
Essayez-le en ligne!
Explication
la source
€pO
après avoir fusionné les facteurs premiers et les exposants:ÓsfìÙ€pO
€
n'est pas nécessaire.MATL , 8 octets
Essayez-le en ligne!
la source
Gelée ,
97 octetsEssayez-le en ligne! ou Découvrez la suite de tests.
Comment?
la source
Gaia , 6 octets
Essayez-le en ligne!
ḋ
calcule la factorisation principale, sous forme de paires [prime, exposant] ._
aplatit la liste.u
supprime les éléments en double.ṗ¦
mappe à travers les éléments et renvoie 1 si un nombre premier est trouvé, 0 sinon.Σ
résume la liste.la source
CJam (13 octets)
Suite de tests en ligne
C'est assez simple: obtenir des nombres premiers avec des multiplicités, réduire à des valeurs distinctes, filtrer les nombres premiers, compter.
Malheureusement, Martin a souligné certains cas qui n'ont pas été traités par l'astuce légèrement intéressante dans ma réponse originale, bien qu'il ait également fourni une économie d'un octet en observant que depuis
mp
donne0
ou1
peut être mappé plutôt que filtré.la source
Ohm v2 ,
65 octets-1 octet grâce à @ Mr.Xcoder
Essayez-le en ligne!
la source
ä{UpΣ
En fait , 7 octets
Essayez-le en ligne!
Explication:
la source
Python 2 ,
142135119 119 octetsEssayez-le en ligne!
la source
Husk ,
1110 octetsEssayez-le en ligne!
EDIT: enregistré 1 octet grâce à Zgarb .
la source
#ṗuS+omLgp
enregistre un octet.Brachylog , 7 octets
Essayez-le en ligne!
Une version amusante de 9 octets:
ḋọ{∋∋ṗ}ᶜ¹
la source
Rubis
-rprime
, 66 octetsEssayez-le en ligne!
la source
Pyth , 15 octets
Essayez-le ici!
la source
Numéros R +, 92 octets
Essayez-le en ligne!
la source
J, 20 octets
Compté à la main lol, alors dites-moi si cela ne fonctionne pas.
Des suggestions de golf?
Soumission ennuyeuse: aplatissez la table de factorisation des nombres premiers et comptez les nombres premiers.
la source
Pari / GP , 47 octets
Essayez-le en ligne!
la source
Javascript (ES6), 145 octets
la source