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) njako dane wejściowe. Pole / pierścień jest skończonym polem tego rzędu (tj. Z/nZ) Lub tylko Zjeśli njest 0. Twój program może się nie powieść, jeśli nnie jest 0to 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. xTermin może po prostu być (x). xmoż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 0przodu, 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
pma elementy {0, 1, ... , p-1}i jest w trakcie dodawania / mnożenia p. Zasadniczo zmniejsz dowolny współczynnik przez mod pi 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.
Zjest uwzględnienie Z/pZodpowiedniego, pa 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.