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