Um número secundário é um número inteiro positivo cujos fatores primos (sem multiplicidade) são todos iguais ou inferiores à sua raiz quadrada. 4
é um número secundário, porque seu único fator primo é 2
, que é igual a sua raiz quadrada. No entanto, 15
não é um número secundário, porque tem 5
como fator primordial, maior que sua raiz quadrada ( ~ 3.9
). Como todos os números primos têm como fatores primos, nenhum número primo é um número secundário. Os primeiros números secundários são os seguintes:
1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Um número terciário é definido da mesma forma, exceto que todos os fatores primos devem ser menores ou iguais à raiz do cubo. Os primeiros números terciários são os seguintes:
1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Em geral, um número n-ário é aquele cujos fatores primos são todos iguais ou inferiores à sua n-ésima raiz. Assim, um número inteiro positivo é um n
número -ar se cada um de seus fatores primos satisfizer . Assim, os números primários são todos números inteiros positivos (todos os fatores primos menores ou iguais a eles mesmos), os números quartenários têm todos os seus fatores primos menores ou iguais à sua quarta raiz e assim por diante.
O desafio
Dados inteiros k
e n
como entradas, imprima o número k
th n
-ary. k
pode ser zero ou um indexado (sua escolha) e n
sempre será positivo.
Exemplos
Estes são os 20 primeiros elementos em cada sequência, com números de até 10 árias:
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Ṫ*³<‘
pois sabemos que, se algum fator falsificar, oẠ
da direita será.Braquilog , 21 bytes
Experimente online!
Esta resposta é um indexada.
Explicação
fonte
JavaScript (ES7),
9590 bytesRazoavelmente rápido, mas infelizmente limitado pelo número máximo de recursões.
Como funciona
Em vez de fatorar um número inteiro i e verificar se todos os seus fatores primos são menores ou iguais a x = piso (i 1 / n ) , tentamos validar a última hipótese diretamente. Esse é o objetivo da função interna F () :
Verificamos se algum número inteiro d em [2 ... i 1 / n ] divide i . Caso contrário, a suposição não é válida e retornamos 1 . Se sim, repetimos recursivamente o processo em i = i / d até que ele falhe ou o número inteiro inicial seja totalmente fatorado ( i == 1 ); nesse caso, decrementamos k . Por sua vez, a função externa f () é chamada recursivamente até k == 0 .
Nota: Devido a erros de arredondamento de ponto flutuante, como
125**(1/3) == 4.9999…
, o valor calculado real de x é floor ((i + 1) 1 / n ) .Demo
(Aqui com uma versão ES6 de 97 bytes para uma melhor compatibilidade.)
Mostrar snippet de código
fonte
JavaScript (ES7),
9379 bytesEu não conseguia entender a resposta de Arnauld, então escrevi a minha e, convenientemente, ela veio com dois bytes a menos. Editar: salvou 14 bytes com a ajuda de @ETHproductions. Ungolfed:
fonte
++i**(1/n)
vez dei**(1/n)
por causa de erros de arredondamento de ponto flutuante, como125**(1/3) == 4.999...
. (O jeito que está escrito, eu acho que o seu código não é afetado por isso.)m
cortar mais dois bytes.Haskell, 86 bytes
Explicação:
(
%%%%
denota o código da linha acima)fonte
filter
com um lambda raramente compensa, uma compreensão da lista geralmente é mais curta: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:
, porque a indexação pode ser baseada em 0.m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k]!!m
Pitão, 13 bytes
Experimente online.
Funciona realmente como a solução Jelly.
fonte
Perl 6, 88 bytes
Minha percepção acidental é que você não precisa analisar todos os fatores
n
, apenas o maior, que é a função internaf
calcula. Infelizmente, explode a pilha com entradas maiores.A robustez pode ser aprimorada adicionando um teste de primalidade, usando o
is-prime
método interno do Ints, a um custo de vários outros caracteres.fonte
Casca , 10 bytes
Experimente online!
Explicação
Levei um tempo para descobrir usando
→
on a lista vazia retornos1
em vez de-Inf
para▲
que as folhas1
na lista (caso contrário, que custaria 2 bytes para preceder-lo novamente):fonte
R, 93 bytes
Indexado a zero.
É uma função recursiva que continua até encontrar o próximo número na fila. Usa para
numbers
empacotar para encontrar os principais fatores.fonte
MATL, 21 bytes
Esta solução usa indexação baseada em uma e as entradas são
n
ek
, respectivamente.Experimente Online!
Explicação
fonte
~
para redirecionar a segunda entrada :-)Brachylog v2 , 16 bytes
Experimente online!
Os meus agradecimentos à solução Jelly de Dennis por me fazer pensar na direção certa.
Explicação
Aqui está uma versão um pouco mais simples que é mais fácil de analisar:
Predicado auxiliar (linha 2): entrada é o expoente n , saída é irrestrita:
Predicado principal (linha 1): input é uma lista que contém o índice k (baseado em 1) e o expoente n ; a saída é irrestrita:
fonte
APL (NARS), 53 caracteres, 106 bytes
teste:
fonte
Python 2 , 114 bytes
Experimente online!
Função indexada 1.
fonte
Japt , 14 bytes
Toma
n
como a primeira entrada ek
(indexada 1) como a segunda.Tente
fonte