Dado um polinômio, determine se é primo.
Um polinômio é ax^n + bx^(n-1) + ... + dx^3 + ex^2 + fx + g
, onde cada termo é um número constante (o coeficiente) multiplicado por uma potência inteira não negativa de x
. A potência mais alta com um coeficiente diferente de zero é chamada de grau. Para esse desafio, consideramos apenas polinômios de pelo menos grau 1. Ou seja, cada polinômio contém alguns x
. Além disso, usamos apenas polinômios com coeficientes inteiros.
Polinômios podem ser multiplicados. Por exemplo, (x+3)(2x^2-2x+3)
é igual 2x^3+4x^2-3x+9
. Assim, 2x^3+4x^2-3x+9
pode ser considerado x+3
e 2x^2-2x+3
, portanto, é composto.
Outros polinômios não podem ser fatorados. Por exemplo, 2x^2-2x+3
não é o produto de dois polinômios (ignorando polinômios constantes ou com coeficientes não inteiros). Por isso, é primo (também conhecido como irredutível).
Regras
- A entrada e a saída podem ser feitas de qualquer maneira padrão.
- A entrada pode ser uma sequência
2x^2-2x+3
, uma lista de coeficientes{2,-2,3}
, ou qualquer outro meio semelhante. - A saída é um valor verdadeiro, se for primo, ou um valor falsey, se for composto. Você deve produzir o mesmo valor de verdade para todos os números primos e o mesmo valor de falsey para todos os polinômios compostos.
- A entrada será de no mínimo 1 e no máximo 10.
- Você não pode usar ferramentas internas para fatoração (de números inteiros ou expressões) ou solução de equações.
Exemplos
Verdadeiro - principal
x+3
-2x
x^2+x+1
x^3-3x-1
-2x^6-3x^4+2
3x^9-8x^8-3x^7+2x^3-10
Falso - composto
x^2
x^2+2x+1
x^4+2x^3+3x^2+2x+1
-3x^7+5x^6-2x
x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12
Respostas:
Mathematica, 224 bytes
Explicação :
O método de Kronecker é usado aqui. Esse método gera certos polinômios de menor grau e testa se existe um fator do polinômio original.
Casos de teste :
Leva 14s no meu laptop para concluir que
3x^9-8x^8-3x^7+2x^3-10
é o melhor.fonte
PARI / GP, 16 bytes, barato como o inferno
Por alguma razão, isso não foi permitido (observando que o comando não fatora ou resolve a equação):
Caso de teste
retorna
1
(verdadeiro). Os outros exemplos funcionam da mesma forma.Mas para mostrar que isso é solucionável da maneira mais difícil, aqui está uma solução completa.
Menos barato, mas sloooooooooow
Realmente não faz sentido jogar isso.
Edit: Os comentaristas apontaram que o primeiro método pode ser desaprovado pelo bom gosto, o espírito das regras, a Convenção de Genebra, as regras padrão das brechas, etc. Não concordo, mas, de qualquer forma, postei a segunda versão juntamente com o primeiro e certamente parece aceitável.
fonte
x^4+1
(o que é famoso por qualquer redutível mod qualquer primo) é irredutível em 86 milissegundos. Se nada mais os outros podem adaptar e jogar golfe nesta versão.