Dado un polinomio distinto de cero con coeficientes enteros y raíces que están en el imaginario y en la línea real de modo que si a
es una raíz, entonces también lo es -a
, devuelve otro polinomio con las raíces giradas 90 grados.
Detalles
El polinomio se puede dar en cualquier formato razonable, por ejemplo, como una lista de coeficientes. La condición de simetría que a
es una raíz si y solo si -a
es una raíz también impone que el polinomio girado tenga también coeficientes enteros reales.
Ejemplos
A continuación, los polinomios se dan como una lista de coeficientes de los monomios en grado descendente. (es decir, la constante viene al final) El polinomio x^2-1
tiene raíces {1,-1}
. Girándolos 90°
multiplicando por i
(la unidad imaginaria), por lo que el polinomio de salida debe tener las raíces {i,-i}
, que es x^2 + 1
.
Input / Output
[1 0 10 0 -127 0 -460 0 576] [1 0 -10 0 -127 0 460 0 576]
[1 0 -4 0] [1 0 4 0]
[1] [1]
fuente
x
, por lo que mi presentación lata cadena de reemplazarx
con(i*x)
? ¿Puede formatear una función que evalúa el polinomio, de modo que mi envío es componerlo con la funciónx -> i*x
?Respuestas:
Mathematica, 10 Bytes
Función pura que toma una función de x y sustituye en ix.
Alternativa con solo 7 bytes, pero no estoy seguro de si cuenta. Función pura que toma una función pura y devuelve una función de x.
fuente
#
como variable y tiene un&
al final.Jalea , 5 bytes
Pruébalo en línea!
Cómo funciona
Multiplica el primer elemento por
1
, el tercer elemento por-1
, etc.Prueba de algoritmo
Deja que el polinomio sea
f(x)
.Dado que tenemos la garantía de que si
x
es una raíz, entonces también lo es-x
,f
debe ser par, lo que significa que su coeficiente para las potencias impares debe ser0
.Ahora, rotar las raíces
90°
es esencialmentef(ix)
.Expandir y luego comparar coeficientes prueba el algoritmo.
fuente
ı*Ċ
es muy bueno, deberías explicarlo :)JavaScript (ES6), 25 bytes
El polinomio original tiene soluciones de la forma
x = ±a
en la que a se encuentra en la línea real o imaginaria. Excepto cuandoa = 0
(en cuyo casox
es un factor del polinomio), esto significa quex² - a²
es un factor del polinomio (lo que significa que los términos alternativos son siempre cero). Ahora, cuando rotamos las raíces, el factor cambia ax² + a²
. Como todos los factores cambian al mismo tiempo, el tercer término del polinomio, que es la suma de todos los-a²
términos, cambia de signo, el quinto término, que es la suma de productos de pares de-a²
términos, mantiene el mismo signo, etc. alternando cada dos términos.fuente
Octava , 27 bytes
Pruébalo en línea!
Esto aplica directamente la definición: calcular raíces, multiplicar por
j
, volver a convertir de raíces a polinomios. Es necesario un redondeo final debido a errores numéricos de punto flotante.fuente
Python 3 , 42 bytes
Pruébalo en línea!
fuente
SILOS ,
7166 bytesPruébalo en línea!
No tengo idea de qué hechicería @Leaky Nun hizo aquí para guardar 5 bytes.Me tomó un segundo averiguarlo, pero el segundo bit de C se alternará como queramos. Por lo tanto, @Leaky Nun explotó esto para guardar los bits que necesitamos.
fuente
TI-Basic, 20 bytes
Si se almacena en
prgmA
, ejecutar con:seq(
solo tenía que ser el comando one * que no admite números complejos. :)*: Exageración
fuente
Casio-Basic, 8 bytes
Función sin nombre, utilizando el enfoque de Mathematica de Ian Miller. Se debe usar el inary imaginario del teclado Math2 (cuenta como 2 bytes, código char 769), y el polinomio se debe ingresar como una ecuación de
x
.7 bytes para el código, 1 byte para especificar
n
como parámetro.Explicación : Toma la ecuación
n
, luego simplemente reemplaza todas las instancias dex
con𝑖x
.fuente
Pari / GP , 16 bytes
Pruébalo en línea!
fuente
Stax , 5 bytes
¡Ejecute y depure en línea!
La respuesta de Port of the Jelly.
Utiliza representación ASCII para explicar:
Si puede haber ceros a la izquierda, primero deben recortarse y se puede hacer a costa de otro byte.
fuente