Um poder perfeito é um número da forma a**b
, onde a>0
e b>1
.
Por exemplo, 125
é um poder perfeito porque pode ser expresso como 5**3
.
Objetivo
Sua tarefa é escrever um programa / função que encontre a n
-ésima potência perfeita, dado um número inteiro positivo n
.
Especificações
- O primeiro poder perfeito é
1
(o que é1**2
). - Entrada / saída em qualquer formato razoável.
- Built-ins são permitidos .
Outras informações
Pontuação
Isso é código-golfe . A solução mais curta em bytes vence.
Casos de teste
input output
1 1
2 4
3 8
4 9
5 16
6 25
7 27
8 32
9 36
10 49
code-golf
arithmetic
number-theory
Freira Furada
fonte
fonte
Respostas:
Gelatina , 11 bytes
Experimente online! .
fundo
Todo número inteiro positivo k pode ser fatorado exclusivamente como o produto das potências dos primeiros m primos, ou seja, k = p 1 α 1 ⋯ p m α m , onde α m > 0 .
Temos que a b ( b> 1 ) para algum número inteiro positivo a se e somente se b é um divisor de todos os expoentes α j .
Assim, um número inteiro k> 1 é uma potência perfeita se e somente se mcd (α 1 , ⋯, α m ) ≠ 1 .
Como funciona
fonte
a_n > 0
?" Parece-me que na fatoração de 21 ^ 2 os expoentes para p = 2 ep = 5 são zero.Mathematica, 34 bytes
Gera um n × n matriz Uma ij = i 1+ j , achata-lo, e retorna o n ésimo elemento.
fonte
CJam, 16 bytes
Teste aqui.
Explicação
Isso usa uma idéia semelhante à resposta Mathematica da LegionMammal.
fonte
Oitava,
573130 bytesAcabei de notar novamente que o Octave não precisa
ndgrid
(enquanto o Matlab) =)fonte
05AB1E , 12 bytes
Código:
Usa a codificação CP-1252 . Experimente online! .
fonte
Sage (versão 6.4, provavelmente também outras):
6463Cria uma função lambda que retorna
n
a potência perfeita. Contamos com o fato de que ele é encontrado nos primeirosn^2
números inteiros. (O1+n^2
necessário paran=1,2
. O0+k
bit é necessário para converterint(k)
emInteger(k)
.)Byte desativado por
xrange
->range
, obrigado Dennis.Apenas um fato divertido:
0
é um poder perfeito para os padrões de Sage, felizmente, porque então1
é o primeiro elemento da lista, não o 0º :)fonte
is_perfect_power()
Pyth -
1211 bytesAbordagem óbvia, apenas passa e verifica todos os números.
Conjunto de Teste .
fonte
MATL, 9 bytes
Experimente online
Esta é uma porta da solução Octave da Flawr para o MATL, aumenta a matriz de potências
n^(n+1)
e obtém an
-ª.fonte
Julia,
6432 bytesEsta é uma função anônima que aceita um número inteiro e retorna um número inteiro. Para chamá-lo, atribua-o a uma variável.
A idéia aqui é a mesma que no Mathematica de LegionMammal resposta : Tomamos o produto externo dos inteiros 1 a n com 2 a n + 1, o colapso da matriz resultante coluna-wise, tome elementos únicos, classificar e conseguir o n º elemento .
Experimente online! (inclui todos os casos de teste)
fonte
JavaScript (ES6), 87
Menos golfe
Teste
fonte
Na verdade, 18 bytes (não concorrentes)
Experimente online! (pode não funcionar devido à necessidade de uma atualização)
Esta solução não é competitiva porque eu corrigi um bug
E
após o lançamento deste desafio.Explicação:
fonte
> <>, 108 bytes
Este programa requer que o número de entrada esteja presente na pilha antes da execução.
Demorou bastante para reduzir o número de bytes desperdiçados para 7!
Após uma verificação para ver se a entrada é
1
, o programa verifica cada númeron
, de 4 por vez para ver se é uma potência perfeita. Faz isso começando coma=b=2
. Sea^b == n
encontrarmos uma potência perfeita, diminua o número de potências perfeitas restantes para encontrar - se já encontramos o número certo, a saída.Se
a^b < n
,b
é incrementado. Sea^b > n
,a
é incrementado. Então, sea == n
descobrimos quen
não é uma potência perfeita, então incrementen
, redefinaa
eb
.fonte
J, 29 bytes
Com base no método @ LegionMammal978 .
Uso
Explicação
fonte
JavaScript (ES7), 104 bytes
Funciona computando todas as potências não maiores que n², classificando a lista resultante e obtendo o enésimo elemento.
fonte
Java, 126
fonte