Si vous avez déjà entendu parler des nombres premiers en classe de mathématiques, vous avez probablement dû, à un moment donné, déterminer si un nombre est premier. Vous avez probablement gâché pendant que vous les appreniez, par exemple, en prenant 39 pour un premier. Eh bien, ne vous inquiétez pas, car 39 est un semi-premier, c'est-à-dire qu'il est le produit de deux nombres premiers.
De même, nous pouvons définir un k- presque premier comme étant le produit de k nombres premiers. Par exemple, 40 est le 4e 4-presque premier; 40 = 5 * 2 * 2 * 2, le produit de 4 facteurs.
Votre tâche consiste à écrire un programme / une fonction qui accepte deux entiers n et k comme entrée et sortie / retourne le n ème k- presque premier nombre. Il s'agit d'un code-golf, donc le programme le plus court en octets l'emporte.
Cas de test
n, k => output
n, 1 => the nth prime number
1, 1 => 2
3, 1 => 5
1, 2 => 4
3, 2 => 9
5, 3 => 27
Divers
Vous devez générer vous-même les nombres premiers par tout autre moyen qu'un simple formulaire fermé, si un tel formulaire fermé existe.
f
en termes def[n,1]
soit correcte, car les listes de presque premiers contiennent des nombres impairs (par exemple les deux derniers exemples, qui ne sont pas exprimables comme le produit d'une puissance de deux et d'un nombre premier). (Et ça dit aussi çaf[n,1] == 2*f[n,1]
.)Réponses:
Pyth, 9 octets
Explication
Essayez-le ici!
Ou essayez une suite de tests!
la source
Brachylog , 9 octets
Battre @sundar en utilisant deux fois moins d'octets
Explication
Essayez-le en ligne!
la source
Pyke (commit 29), 8 octets (non compétitif)
Explication:
la source
Julia,
84785957 octetsIl s'agit d'une fonction récursive qui accepte deux entiers et renvoie un entier. L'approche ici consiste à comparer la somme des exposants de la factorisation principale
k
.Non golfé:
la source
Gelée, 9 octets
Essayez-le en ligne!
Comment ça marche
la source
Brachylog , 18 octets
Essayez-le en ligne!
la source
Mathematica,
5651 octetsAttention: c'est théorique. Ne pas exécuter pour des valeurs> 4. Remplacez 2 ^ ## par une expression plus efficace.
la source
n=1
.PrimeOmega[1]
évalue à0
,&&#>1
est redondant.Mathematica,
5349 octetsGénère une liste d'entiers basée sur une limite supérieure lâche.
PrimeOmega
compte les facteurs premiers avec multiplicités, le k -presque premierCases
sont prises dans la liste, et le n ième membre de ce sous - ensemble est retourné.la source
2^Sequence[1,2]
de comprendre pourquoi ce dernier échoue.Haskell, 88 octets
Peut probablement être joué au golf beaucoup plus, car je suis encore un débutant à Haskell. La fonction
q
renvoie le nombre de facteurs de son argument et l'f
utilise pour obtenir l'nth
élément d'une liste composée de tous les nombres qui ont desk
facteurs.la source
MATL, 14 octets
Essayez-le sur MATL en ligne
la source
Python 3, 100 octets
Il s'agit d'une fonction de force brute très simple. Il vérifie chaque nombre à partir de 2 avec
sympy
lafactorint
fonction de jusqu'à ce qu'il ait trouvén
k
presque des nombres premiers, auquel cas la fonction renvoie len
th de ceux-ci.Non golfé:
J'utilise
sum(factorint(a).values())
carfactorint
retourne un dictionnaire defactor: exponent
paires. Saisir les valeurs du dictionnaire (les exposants) et les additionner me dit combien il y a de facteurs premiers et donc ce qu'estk
ce-k
presque premier.la source
Python 2 , 76 octets
Essayez-le en ligne!
la source