Не використовуючи ніяких вбудованих факторингових / поліноміальних функцій, розподіліть поліном повністю на невідтворювані над цілими чи кінцевими полями.
Вхідні дані
Ваша програма / функція отримає деякий простий (або нульовий) номер у n
якості входу. Поле / кільце - це кінцеве поле цього порядку (тобто Z/nZ
) або просто, Z
якщо n
є 0
. Ваша програма може вийти з ладу, якщо n
це не так 0
чи просто. Поліном буде в F[x]
.
Ваша програма / функція також отримає поліном як вхід.
У введенні є деяка гнучкість, обов'язково вкажіть, як ви маєте намір отримати вхід. Наприклад, поліном може бути введений як перелік коефіцієнтів, або у формі, яку очікують більшість людей (наприклад:) 50x^3 + x^2
, або в якійсь іншій розумній формі. Або формат введення поля / кільця також може бути різним.
Вихідні дані
Ваша програма / функція виведе поліном, який враховується повністю. Ви можете залишити кілька коренів розширеними (тобто (x + 1)(x + 1)
замість (x + 1)^2
). Ви можете видалити пробіл між бінарними операторами. Ви можете замінити протиставлення *
. Ви можете вставити пробіли в дивних місцях. Ви можете змінити порядок чинників у будь-який порядок. x
Термін може бути просто (x)
. x
можна записати як x^1
; однак постійний термін може не мати x^0
. Сторонні +
ознаки допустимі. У вас може бути термін з 0
передньою частиною, вони повинні бути залишені. Провідний термін кожного фактора повинен бути позитивним, негативні ознаки повинні бути зовні.
Тестові випадки, ваша програма повинна мати можливість виробляти вихід для кожного з них у розумний час (скажімо, <= 2 години):
Вхід: 2, x^3 + x^2 + x + 1
Вихід: (x + 1)^3
Вхід: 0, x^3 + x^2 + x + 1
Вихід: (x + 1)(x^2 + 1)
Вхід: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Вихід: (3x + 2)(2x - 5)(x^2 + 3)
Вхід: 5, x^4 + 4x^3 + 4x^2 + x
Вихід: x(x + 4)(x + 4)(x + 1)
Вхід: 0, x^5 + 5x^3 + x^2 + 4x + 1
Вихід: (x^3 + 4x + 1)(x^2 + 1)
Особлива подяка Пітеру Тейлору за критику моїх тестових справ
p
має елементи, {0, 1, ... , p-1}
і воно знаходиться в режимі додавання / множення p
. В основному, зменшіть будь-який коефіцієнт на мод, p
і ви добре. Також зауважте, що якщо він має корінь, тобто лінійний коефіцієнт, один з {0, ... , p-1}
буде виробляти 0
(mod p
), коли він підключений до многочлена.
Z
факторів є переоцінка Z/pZ
на відповідний, p
а потім на підйом Хензеля. Тим не менш, підхід із гольфу, мабуть, (і це, безумовно, маршрут, на який я дивлюся), щоб використовувати простий обмежений на висоту чинників і грубу силу.