내장 인수 분해 / 다항식 함수를 사용하지 않고 정수 또는 유한 필드에 대해 다항식을 돌이킬 수없는 요소로 완전히 인수 분해하십시오.
입력
프로그램 / 기능은 소수 (또는 소수) n
를 입력으로받습니다. 필드 / 링 순서 (즉,의 유한 필드 Z/nZ
), 아니면 그냥 Z
경우 n
입니다 0
. n
그렇지 0
않거나 소수 인 경우 프로그램이 실패 할 수 있습니다 . 다항식은 안에 F[x]
있습니다.
프로그램 / 기능도 다항식을 입력으로받습니다.
입력에 약간의 융통성이 있습니다. 입력 수신 방법을 지정하십시오. 예를 들어, 다항식은 계수 목록 또는 대부분의 사람들이 기대하는 형식 (예 :) 50x^3 + x^2
또는 기타 합리적인 형식 으로 입력 될 수 있습니다 . 또는 필드 / 링을 입력하는 형식도 다를 수 있습니다.
산출
프로그램 / 기능이 다항식 인수 분해를 완전히 출력합니다. 여러 개의 루트를 확장 된 상태로 둘 수 있습니다 (예 : (x + 1)(x + 1)
대신 (x + 1)^2
). 이진 연산자 사이에 공백을 제거 할 수 있습니다. juxtaposition을로 바꿀 수 있습니다 *
. 이상한 곳에 공백을 넣을 수 있습니다. 원하는 순서대로 요인을 다시 정렬 할 수 있습니다. 그 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)
테스트 케이스를 비판 한 Peter Taylor에게 특별한 감사를드립니다.
p
에는 요소가 {0, 1, ... , p-1}
있으며 더하기 / 곱하기 모드에 p
있습니다. 기본적으로 mod로 모든 계수를 줄이면 p
좋습니다. 또한 루트, 즉 선형 인자 가 있으면 다항식에 연결될 때 (mod ) 중 하나 {0, ... , p-1}
가 생성됩니다 . 0
p
Z
입니다 . 그러나 골프 가능한 접근 방식은 아마도 요소의 높이에 대한 간단한 경계를 사용하고 무차별 강제하는 것입니다 (그리고 이것이 내가보고있는 경로입니다). Z/pZ
p