Um polinômio é divisível por um fator (x-n)
se for f(n)=0
para uma função f
. Seu trabalho: determinar se uma função polinomial f(x)
é divisível por (x-n)
.
A entrada
A entrada está na forma de (x-n), (Polynomial)
. Lembre-se, se n for negativo, (x-n)
estará na forma de entrada de(x+n)
. Para o polinômio, todos os expoentes serão colocados como ^
. Os coeficientes serão gravados ao lado da variável x
. Um exemplo polinomial poderia ser 2x^2 + x^1
. Não haverá espaços entre nada. O termo x
será inserido como x^1
. Então, o que "normalmente" olhar como (x - 1)
será (x^1-1)
. Os coeficientes e potências sempre serão inteiros. O coeficiente estará implícito se for justo x
. Ou seja, x
pode ser interpretado como1x
A saída
Um valor booleano. Verdade ou Falsey.
Graças a @AlexA. Por me ajudar a esclarecer isso!
Exemplos
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
Regras
- Isso é código-golfe , então o código mais curto em bytes ganha
Infelizmente, não sei como implementar o cabeçalho do snippet. Se alguém souber como, fique à vontade para editar a postagem.
fonte
Respostas:
Pitão - 39 bytes
Esta é uma combinação monstruosa de regexp e eval. Eu gosto da abordagem, mas tentarei melhorar a implementação.
Ele usa o teorema do restante polinomial .
Não funciona online por causa do uso de avaliação.
fonte
Casio Basic, 19 bytes
Como se vê, o fx-CP400 pode funcionar
mod
com expressões algébricas!Polinômio e fator devem ser inseridos como expressões. 16 bytes para o código, 3 bytes para inserir
a,b
na caixa de valor do parâmetro.fonte
MATLAB,
103 99 97 9593 bytesEstou tentando algumas coisas diferentes e consegui que isso funcionasse para economizar alguns bytes:
Se eu puder reduzir isso ainda mais, publicarei uma explicação.
Código antigo uma explicação
Isso também funciona com o Octave . Você pode experimentá-lo online . Salvei o programa como um script chamado
isFactor.m
, para que você possa entrarisFactor
no prompt. [Nota: no Octave emite um aviso durante a execução - o MATLAB não gera isso].A entrada deve estar no formato
'(x^1+7),(x^2-49)'
conforme a pergunta. As aspas são adicionadas para que o MATLAB / Octave saiba que é uma string.A saída é a
0
ou a1
dependendo de ser verdadeira ou falsa.Portanto, o código funciona da seguinte maneira. Primeiro, solicitamos uma entrada e depois a analisamos. A cadeia de análise extrai o número assinado após o primeiro
(x^1
da cadeia - este é o nosso valor den
. Depois, continua a extrair a string (%s
) após),
a entrada - esta é a nossa expressão.Em seguida, extraímos o valor de
n
e definimosx
igual a ele - vamos avaliar se a expressão é igual a zero quandon==x
, então é por isso que armazenamos o valor em x. Também negamos o número extraído, devido ao sinal de menos ao analisar.Em seguida, exibiremos a saída que é um booleano
O resultado é basicamente a negação lógica da nossa equação avaliada. Se
f(x)
for zero, isso retornará 1, caso contrário, resultará em zero.Estamos avaliando a expressão de entrada, mas, para fazer isso, precisamos reformatá-la um pouco para que o MATLAB possa entender. Quando lemos a string, na verdade é uma matriz do
double
tipo, portanto, precisamos convertê-la em uma matriz de caracteres. Antes da conversão, também nos livramos do primeiro elemento, pois é para isso que usamosn
. Precisamos substituir qualquer ocorrênciax
precedida por um número (por exemplo4x
) pela mesma coisa, mas com um*
sinal de multiplicação ( ) entre eles para que o MATLAB possa calcular.fonte
VBScript,
118116 bytesComo sabemos que a primeira parte da entrada é um polinômio linear, precisamos apenas verificar se sua raiz corresponde à do segundo polinômio; e precisamos preparar o termo
eval
inserindo*
conforme necessário.fonte
Axiom
77180 Bytesa solução anterior
estava errado porque assume o grau (b)> = grau (a) um bug que escrevi ... teste e resultados
fonte