Un nombre secondaire est un entier positif dont les facteurs premiers (sans multiplicité) sont tous inférieurs ou égaux à sa racine carrée. 4
est un nombre secondaire, car son seul facteur premier est 2
égal à sa racine carrée. Cependant, ce 15
n’est pas un nombre secondaire, car il a 5
pour facteur principal, qui est supérieur à sa racine carrée ( ~ 3.9
). Parce que tous les nombres premiers ont eux-mêmes des facteurs premiers, aucun nombre premier n'est un nombre secondaire. Les premiers numéros secondaires sont les suivants:
1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Un nombre tertiaire est défini de la même façon, sauf que tous les facteurs premiers doivent être inférieurs ou égaux à sa racine cubique. Les premiers numéros tertiaires sont les suivants:
1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
En général, un nombre n-aire est un nombre dont les facteurs premiers sont tous inférieurs ou égaux à sa nième racine. Ainsi, un entier positif est un n
nombre -ary si et seulement si chacun de ses facteurs premiers satisfait . Ainsi, les nombres primaires sont tous des entiers positifs (tous les facteurs premiers inférieurs ou égaux à eux-mêmes), les nombres du quartième siècle ont tous leurs facteurs premiers inférieurs ou égaux à leur quatrième racine, et ainsi de suite.
Le défi
Étant donné les entiers k
et en n
tant qu'entrées, donne le numéro k
th n
-ary. k
peut être zéro ou un index (votre choix) et n
sera toujours positif.
Exemples
Ce sont les 20 premiers éléments de chaque séquence, jusqu'à 10 nombres:
Primary: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Secondary: 1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Tertiary: 1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Quarternary: 1, 16, 32, 64, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512
5-ary: 1, 32, 64, 128, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152
6-ary: 1, 64, 128, 256, 512, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592
7-ary: 1, 128, 256, 512, 1024, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561
8-ary: 1, 256, 512, 1024, 2048, 4096, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496
9-ary: 1, 512, 1024, 2048, 4096, 8192, 16384, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656
10-ary: 1, 1024, 2048, 4096, 8192, 16384, 32768, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312, 98304, 104976, 110592, 118098, 124416
ÆfṪ*³<‘
car nous savons que si un facteur falsifieẠ
celui de droite.Brachylog , 21 octets
Essayez-le en ligne!
Cette réponse est un indexé.
Explication
la source
JavaScript (ES7),
9590 octetsAssez rapide mais malheureusement limité par le nombre maximal de récursions.
Comment ça marche
Plutôt que de factoriser un entier i et de vérifier que tous ses facteurs premiers sont inférieurs ou égaux à x = floor (i 1 / n ) , nous essayons de valider directement cette dernière hypothèse. C'est le but de la fonction interne F () :
Nous vérifions si un entier d dans [2 ... i 1 / n ] divise i . Sinon, l'hypothèse n'est pas valide et nous retournons 1 . Si oui, on répète récursivement le processus sur i = i / d jusqu'à ce qu'il échoue ou que l'entier initial soit entièrement factorisé ( i == 1 ), auquel cas on décrémente k . À son tour, la fonction externe f () est appelée récursivement jusqu'à ce que k == 0 .
Remarque: En raison d'erreurs d'arrondi en virgule flottante telles que
125**(1/3) == 4.9999…
, la valeur réelle calculée pour x est floor ((i + 1) 1 / n ) .Démo
(Voici une version ES6 de 97 octets pour une meilleure compatibilité.)
Afficher l'extrait de code
la source
JavaScript (ES7),
9379 octetsJe ne comprenais pas la réponse de Arnauld, alors j’écrivis la mienne. Edit: 14 octets enregistrés avec l’aide de @ETHproductions. Ungolfed:
la source
++i**(1/n)
plutôt quei**(1/n)
parce que des erreurs d' arrondi en virgule flottante tels que125**(1/3) == 4.999...
. (La façon dont c'est écrit, je pense que votre code n'est pas affecté par cela.)m
deux octets supplémentaires.Haskell, 86 octets
Explication:
(
%%%%
dénote le code de la ligne ci-dessus)la source
filter
avec un lambda est rarement rentable, une compréhension de liste est généralement plus courte:m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k])!!m
.0:
, car l'indexation peut être basée sur 0.m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k]!!m
Pyth, 13 octets
Essayez-le en ligne.
Fonctionne vraiment comme la solution Jelly.
la source
Perl 6, 88 octets
Mon intuition accidentelle est que vous n'avez pas besoin de regarder tous les facteurs de
n
, mais uniquement le plus important, qui est calculé par la fonction internef
. Malheureusement, il souffle la pile avec des entrées plus grandes.La robustesse peut être améliorée en ajoutant un test de primalité, utilisant la
is-prime
méthode intégrée sur Ints, pour un coût de plusieurs caractères supplémentaires.la source
Coque , 10 octets
Essayez-le en ligne!
Explication
Il m'a fallu un certain temps pour comprendre comment utiliser
→
sur la liste vide les retours1
au lieu de ceux-Inf
pour▲
lesquels il reste1
(sinon cela coûterait 2 octets pour l'ajouter à nouveau):la source
R, 93 octets
Zéro indexé.
C'est une fonction récursive qui ne fait que continuer jusqu'à trouver le prochain nombre en ligne. Utilise pour
numbers
emballer pour trouver les facteurs premiers.la source
MATL, 21 octets
Cette solution utilise une indexation à base unique et les entrées sont
n
etk
, respectivement.Essayez-le en ligne!
Explication
la source
~
de réutiliser la deuxième entrée :-)Brachylog v2 , 16 octets
Essayez-le en ligne!
Crédit à la solution Jelly de Dennis m'avoir fait réfléchir dans la bonne direction.
Explication
Voici une version légèrement non-golfée, plus facile à analyser:
Prédicat auxiliaire (ligne 2): l'entrée est l'exposant n , la sortie n'est pas contrainte:
Prédicat principal (ligne 1): l'entrée est une liste contenant l'indice k (basé sur 1) et l'exposant n ; la sortie n'est pas contrainte:
la source
APL (NARS), 53 caractères, 106 octets
tester:
la source
Python 2 , 114 octets
Essayez-le en ligne!
Fonction 1-indexée.
la source
Japt , 14 octets
Prend
n
comme première entrée etk
(indexé 1) comme seconde.L'essayer
la source