Un poder perfecto es un número de la forma a**b
, dónde a>0
y b>1
.
Por ejemplo, 125
es un poder perfecto porque se puede expresar como 5**3
.
Objetivo
Su tarea es escribir un programa / función que encuentre la n
enésima potencia perfecta, dado un entero positivo n
.
Especificaciones
- El primer poder perfecto es
1
(que es1**2
). - Entrada / salida en cualquier formato razonable.
- Se permiten empotrados .
Más información
Puntuación
Este es el código de golf . La solución más corta en bytes gana.
Casos de prueba
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
Monja permeable
fuente
fuente
Respuestas:
Jalea , 11 bytes
Pruébalo en línea! .
Antecedentes
Cada entero positivo k se puede factorizar únicamente como el producto de las potencias de los primeros m primos, es decir, k = p 1 α 1 ⋯ p m α m , donde α m > 0 .
Tenemos que a b ( b> 1 ) para algún entero positivo a si y solo si b es un divisor de todos los exponentes α j .
Por lo tanto, un entero k> 1 es una potencia perfecta si y solo si mcd (α 1 , ⋯, α m ) ≠ 1 .
Cómo funciona
fuente
a_n > 0
?" Me parece que en la factorización para 21 ^ 2 los exponentes para p = 2 y p = 5 son cero.Mathematica, 34 bytes
Genera un n × n matriz A ij = i 1+ j , la aplana, y devuelve el n -ésimo elemento.
fuente
CJam, 16 bytes
Pruébalo aquí.
Explicación
Utiliza una idea similar a la respuesta de Mationica de LegionMammal.
fuente
Octava,
573130 bytesAcabo de notar nuevamente que Octave no necesita
ndgrid
(mientras que Matlab sí) =)fuente
05AB1E , 12 bytes
Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Sage (versión 6.4, probablemente también otras):
6463Crea una función lambda que devuelve
n
el poder perfecto. Confiamos en el hecho de que se encuentra dentro de los primerosn^2
enteros. (El1+n^2
es necesario paran=1,2
. El0+k
bit es necesario convertirint(k)
aInteger(k)
.)Byte apagado para
xrange
->range
, gracias Dennis.Solo un hecho divertido:
0
es un poder perfecto para los estándares de Sage, afortunadamente, porque entonces1
es el primer elemento de la lista, no el 0º :)fuente
is_perfect_power()
Pyth -
1211 bytesEnfoque obvio, solo pasa y verifica todos los números.
Test Suite .
fuente
MATL, 9 bytes
Pruébalo en línea
Este es un puerto de la solución Octave de Flawr para MATL, crea la matriz de potencias
n^(n+1)
y obtén lan
enésima.fuente
Julia
6432 bytesEsta es una función anónima que acepta un entero y devuelve un entero. Para llamarlo, asígnelo a una variable.
La idea aquí es la misma que en la respuesta Mathematica de LegionMammal : Tomamos el producto externo de los enteros 1 a n con 2 a n + 1, colapsamos la matriz resultante en forma de columna, tomamos elementos únicos, ordenamos y obtenemos el n º elemento .
Pruébalo en línea! (incluye todos los casos de prueba)
fuente
JavaScript (ES6), 87
Menos golf
Prueba
fuente
En realidad, 18 bytes (no competitivos)
Pruébalo en línea! (puede no funcionar debido a la necesidad de una actualización)
Esta solución no es competitiva porque solucioné un error
E
después de publicar este desafío.Explicación:
fuente
> <>, 108 bytes
Este programa requiere que el número de entrada esté presente en la pila antes de ejecutarse.
¡Se necesitó mucho para reducir el número de bytes desperdiciados a 7!
Después de una verificación para ver si la entrada es
1
, el programa verifica cada númeron
, desde 4 por turno para ver si es una potencia perfecta. Hace esto comenzando cona=b=2
. Sia^b == n
, hemos encontrado un poder perfecto, entonces disminuya el número de poderes perfectos que quedan por encontrar; si ya hemos encontrado el número correcto, salida.Si
a^b < n
,b
se incrementa. Sia^b > n
,a
se incrementa. Entonces, sia == n
, hemos descubierto quen
no es una potencia perfecta, así que incrementen
, reiniciea
yb
.fuente
J, 29 bytes
Basado en el método de @ LegionMammal978 .
Uso
Explicación
fuente
JavaScript (ES7), 104 bytes
Funciona calculando todas las potencias no mayores que n², ordenando la lista resultante y tomando el enésimo elemento.
fuente
Java, 126
fuente