Без использования каких-либо встроенных функций факторинга / полинома разложите полином полностью на неприводимые числа или целое конечное поле.
вход
Ваша программа / функция получит некоторое простое (или нулевое) число в 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(мод p), когда он подключен к полиному.
Zзаключается в подборе Z/pZподходящего, pа затем гензелевого лифта. Тем не менее, подход к игре в гольф, вероятно, (и это, конечно, маршрут, который я смотрю), чтобы использовать простую оценку высоты факторов и грубую силу.