¿Es un factor de un polinomio?

11

Un polinomio es divisible por un factor (x-n)si es f(n)=0para 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 xincluirá 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, xpuede 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 , 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.

intboolstring
fuente
¿La entrada será una cadena con esa forma exacta, es decir, parens alrededor del candidato divisor, una coma con cero o un espacio y parens alrededor del polinomio?
Alex A.
2
Posible duplicado
intrepidcoder
Definitivamente no es un duplicado de eso.
intboolstring
@intrepidcoder Esto no es un duplicado porque la pregunta no es factorizar un polinomio. Es para ver si un polinomio se puede dividir por un factor lineal.
intboolstring
¿Los coeficientes polinómicos serán siempre enteros?
Trauma digital el

Respuestas:

5

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 .

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

No funciona en línea debido al uso eval.

Maltysen
fuente
3

Casio Basic, 19 bytes

judge(mod(b,a)=0

¡Resulta que el fx-CP400 puede funcionar modcon expresiones algebraicas!

El polinomio y el factor deben ingresarse como expresiones. 16 bytes para el código, 3 bytes para ingresar a,ben el cuadro de valor del parámetro.

numbermaniac
fuente
1

MATLAB, 103 99 97 95 93 bytes

Estoy intentando algunas cosas diferentes, y conseguí que esto funcione para guardar un par de bytes:

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

Si puedo reducir eso aún más, publicaré una explicación.


Código antiguo una explicación

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

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 ingresar isFactoren 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 0o a 1dependiendo 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^1en la cadena; este es nuestro valor de n. Luego continúa extrayendo la cadena ( %s) después ),de la entrada: esta es nuestra expresión.

t=sscanf(input(''),'(x^1%d),%s')';

A continuación, extraemos el valor de ny lo establecemos xigual: vamos a evaluar si la expresión es igual a cero cuando n==x, por eso almacenamos el valor en x. También negamos el número extraído, debido al signo menos al analizar.

x=-t(1);

Luego mostraremos la salida que es booleana

disp(

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.

     ~eval(

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 doubletipo, 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 usamos n. Luego necesitamos reemplazar cualquier ocurrencia de la xcual esté precedida por un número (por ejemplo 4x) por la misma cosa pero con un *signo de multiplicación ( ) entre ellos para que MATLAB pueda calcularlo.

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)
Tom Carpenter
fuente
1

VBScript, 118116 bytes

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

Como 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 evalinsertando *según sea necesario.

Hilbert
fuente
1

Axioma 77 180 bytes

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

la solución anterior

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

estaba equivocado porque suponía grado (b)> = grado (a) un error que escribí ... prueba y resultados

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
RosLuP
fuente