Bez użycia jakichkolwiek wbudowanych funkcji faktoringowych / wielomianowych, rozkład wielomian całkowicie na nieredukowalne ponad liczbami całkowitymi lub polem skończonym.
Wejście
Twój program / funkcja otrzyma pewną liczbę pierwszą (lub zero) n
jako dane wejściowe. Pole / pierścień jest skończonym polem tego rzędu (tj. Z/nZ
) Lub tylko Z
jeśli n
jest 0
. Twój program może się nie powieść, jeśli n
nie jest 0
to podstawowa liczba. Wielomian będzie w F[x]
.
Twój program / funkcja otrzyma również wielomian jako dane wejściowe.
Dane wejściowe są trochę elastyczne, pamiętaj o określeniu, w jaki sposób zamierzasz otrzymywać dane wejściowe. Na przykład wielomian może być wprowadzony jako lista współczynników lub w formie, jakiej większość ludzi oczekuje (np .:) 50x^3 + x^2
, lub w innej rozsądnej formie. Lub format wprowadzania pola / pierścienia może być również inny.
Wynik
Twój program / funkcja wyprowadzi wielomian faktoryzowany całkowicie. Możesz pozostawić rozwinięte wiele korzeni (tzn. (x + 1)(x + 1)
Zamiast (x + 1)^2
). Możesz usunąć spacje między operatorami binarnymi. Możesz zamienić zestawienie na *
. Możesz wstawiać białe znaki w dziwnych miejscach. Możesz zmienić kolejność czynników w dowolnej kolejności. x
Termin może po prostu być (x)
. x
można zapisać jako x^1
; jednak stały termin może nie mieć x^0
. Obce +
znaki są dopuszczalne. Możesz nie mieć terminu z 0
przodu, należy je pominąć. Termin wiodący każdego czynnika musi być dodatni, znaki ujemne muszą znajdować się na zewnątrz.
Przypadki testowe, twój program powinien być w stanie wygenerować dane wyjściowe dla każdego z nich w rozsądnym czasie (powiedzmy <= 2 godziny):
Wejście: 2, x^3 + x^2 + x + 1
Wynik: (x + 1)^3
Wejście: 0, x^3 + x^2 + x + 1
Wynik: (x + 1)(x^2 + 1)
Wejście: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Wynik: (3x + 2)(2x - 5)(x^2 + 3)
Wejście: 5, x^4 + 4x^3 + 4x^2 + x
Wynik: x(x + 4)(x + 4)(x + 1)
Wejście: 0, x^5 + 5x^3 + x^2 + 4x + 1
Wynik: (x^3 + 4x + 1)(x^2 + 1)
Specjalne podziękowania dla Petera Taylora za krytykę moich przypadków testowych
p
ma elementy {0, 1, ... , p-1}
i jest w trakcie dodawania / mnożenia p
. Zasadniczo zmniejsz dowolny współczynnik przez mod p
i jesteś dobry. Zauważ też, że jeśli ma pierwiastek, tzn. Współczynnik liniowy, jeden z {0, ... , p-1}
nich wytworzy 0
(mod p
), gdy jest podłączony do wielomianu.
Z
jest uwzględnienie Z/pZ
odpowiedniego, p
a następnie henselowego wzrostu . Jednak podejście do gry w golfa jest prawdopodobnie (i z pewnością jest to trasa, na którą patrzę), aby użyć prostego ograniczenia na wysokości czynników i brutalnej siły.