Sem usar nenhuma função interna de fatoração / polinômio, fatore um polinômio completamente em irredutíveis sobre os números inteiros ou em um campo finito.
Entrada
Seu programa / função receberá algum número primo (ou zero) ncomo entrada. O campo / anel é o campo finito dessa ordem (ou seja Z/nZ), ou apenas Zse nfor 0. Seu programa pode falhar se nnão for 0ou for primo. O polinômio será inserido F[x].
Seu programa / função também receberá o polinômio como entrada.
Há alguma flexibilidade na entrada, certifique-se de especificar como você pretende receber entrada. Por exemplo, o polinômio pode ser inserido como uma lista de coeficientes, ou na forma que a maioria das pessoas espera (ex:) 50x^3 + x^2, ou em alguma outra forma razoável. Ou o formato de entrada do campo / toque também pode ser diferente.
Saída
Seu programa / função produzirá o polinômio fatorado completamente. Você pode deixar várias raízes expandidas (ou seja, em (x + 1)(x + 1)vez de (x + 1)^2). Você pode remover o espaço em branco entre operadores binários. Você pode substituir a justaposição por *. Você pode inserir espaços em branco em lugares estranhos. Você pode reorganizar os fatores na ordem que desejar. O xtermo poderia ser apenas (x). xpode ser escrito como x^1; no entanto, o termo constante pode não ter x^0. +Sinais estranhos são permitidos. Você pode não ter um termo com um 0na frente, eles devem ser deixados de fora. O termo principal de cada fator deve ser positivo, os sinais negativos devem estar fora.
Nos casos de teste, seu programa deve ser capaz de produzir saída para cada um deles em tempo razoável (por exemplo, <= 2 horas):
Entrada: 2, x^3 + x^2 + x + 1
Saída: (x + 1)^3
Entrada: 0, x^3 + x^2 + x + 1
Saída: (x + 1)(x^2 + 1)
Entrada: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Saída: (3x + 2)(2x - 5)(x^2 + 3)
Entrada: 5, x^4 + 4x^3 + 4x^2 + x
Saída: x(x + 4)(x + 4)(x + 1)
Entrada: 0, x^5 + 5x^3 + x^2 + 4x + 1
Saída: (x^3 + 4x + 1)(x^2 + 1)
Agradecimentos especiais a Peter Taylor por criticar meus casos de teste
ppossui os elementos {0, 1, ... , p-1}e está sob o modo de adição / multiplicação p. Basicamente, reduza qualquer coeficiente por mod pe você é bom. Além disso, observe que, se tiver uma raiz, ou seja, um fator linear, um dos dois {0, ... , p-1}produzirá 0(mod p) quando estiver conectado ao polinômio.
Zé fatorar Z/pZpara um pelevador adequado e depois Hensel. No entanto, a abordagem do jogo de golfe provavelmente é (e certamente esse é o caminho que estou vendo) usar um limite simples na altura dos fatores e força bruta.