Un polinomio es divisible por un factor (x-n)
si es f(n)=0
para una función f
. Su trabajo: determinar si una función polinómica f(x)
es divisible por (x-n)
.
La entrada
La entrada tiene la forma de (x-n), (Polynomial)
. Recuerde, si n es negativo, (x-n)
estará en la forma de entrada de(x+n)
. Para el polinomio, todos los exponentes se colocarán como ^
. Los coeficientes se escribirán al lado de la variable x
. Un ejemplo de polinomio podría ser 2x^2 + x^1
. No habrá espacios entre nada. El término se x
incluirá como x^1
. Entonces, ¿cuál sería "normalmente" mirada al igual que (x - 1)
habrá (x^1-1)
. Los coeficientes y potencias siempre serán enteros. El coeficiente uno estará implícito si es justo x
. Es decir, x
puede interpretarse como1x
La salida
Un valor booleano. Verdad o Falsey.
Gracias a @AlexA. ¡Por ayudarme a aclarar esto!
Ejemplos
Input:(x^1-1),(x^1-1)
Output: True
Input: (x^1+2),(2x^2+4x^1+2)
Output: False
Input: (x^1+7),(x^2-49)
Output: True
Reglas
- Este es el código de golf , por lo que gana el código más corto en bytes
Desafortunadamente, no sé cómo implementar la tabla de clasificación de fragmentos. Si alguien sabe cómo, siéntase libre de editar la publicación.
fuente
Respuestas:
Pyth - 39 bytes
Esta es una combinación monstruosa de expresiones regulares y eval. Me gusta el enfoque, pero intentaré mejorar la implementación.
Utiliza el teorema del resto polinómico .
No funciona en línea debido al uso eval.
fuente
Casio Basic, 19 bytes
¡Resulta que el fx-CP400 puede funcionar
mod
con expresiones algebraicas!El polinomio y el factor deben ingresarse como expresiones. 16 bytes para el código, 3 bytes para ingresar
a,b
en el cuadro de valor del parámetro.fuente
MATLAB,
103 99 97 9593 bytesEstoy intentando algunas cosas diferentes, y conseguí que esto funcione para guardar un par de bytes:
Si puedo reducir eso aún más, publicaré una explicación.
Código antiguo una explicación
Esto también funciona con Octave . Puedes probarlo en línea . He guardado el programa como un script llamado
isFactor.m
, por lo que puede ingresarisFactor
en el indicador. [Nota: en Octave escupe una advertencia mientras se ejecuta - MATLAB no genera esto].La entrada debe estar en el formato
'(x^1+7),(x^2-49)'
según la pregunta. Las comillas se agregan para que MATLAB / Octave sepa que es una cadena.El resultado es a
0
o a1
dependiendo de si es verdadero o falso.Entonces, el código funciona de la siguiente manera. Primero solicitamos una entrada y luego la analizamos. La cadena de análisis extrae el número firmado después del primero
(x^1
en la cadena; este es nuestro valor den
. Luego continúa extrayendo la cadena (%s
) después),
de la entrada: esta es nuestra expresión.A continuación, extraemos el valor de
n
y lo establecemosx
igual: vamos a evaluar si la expresión es igual a cero cuandon==x
, por eso almacenamos el valor en x. También negamos el número extraído, debido al signo menos al analizar.Luego mostraremos la salida que es booleana
El resultado es básicamente la negación lógica de nuestra ecuación evaluada. Si
f(x)
es cero, esto devolverá 1, de lo contrario resultará en cero.Estamos evaluando la expresión de entrada, pero para hacer esto, necesitamos reformatearla ligeramente para que MATLAB pueda entender. Cuando leemos la cadena, en realidad es una matriz de
double
tipo, por lo que debemos convertirla en una matriz de caracteres. Antes de la conversión, también nos deshacemos del primer elemento, ya que eso es lo que usamosn
. Luego necesitamos reemplazar cualquier ocurrencia de lax
cual esté precedida por un número (por ejemplo4x
) por la misma cosa pero con un*
signo de multiplicación ( ) entre ellos para que MATLAB pueda calcularlo.fuente
VBScript,
118116bytesComo sabemos que la primera parte de la entrada es un polinomio lineal, solo necesitamos verificar si su raíz coincide con la del segundo polinomio; y necesitamos preparar el término
eval
insertando*
según sea necesario.fuente
Axioma
77180 bytesla solución anterior
estaba equivocado porque suponía grado (b)> = grado (a) un error que escribí ... prueba y resultados
fuente