유한 필드 또는 정수에 대한 다항식을 인수 분해합니다


20

내장 인수 분해 / 다항식 함수를 사용하지 않고 정수 또는 유한 필드에 대해 다항식을 돌이킬 수없는 요소로 완전히 인수 분해하십시오.

입력

프로그램 / 기능은 소수 (또는 소수) 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에게 특별한 감사를드립니다.


1
나는 이것이 어려운 학부 수학의 일부를 역전시키고 있다고 생각한다 . 여기서 올바른 방향으로 나아가고 있습니까?
Digital Trauma

1
다항식을 올바르게 인쇄 하려고하는 악몽이 있었음을 상기시켜줍니다 .
Sp3000

이해하지 못해서 죄송하지만 첫 번째 입력 번호는 무엇을해야합니까? 또는 출력에 어떤 영향을 미칩니 까?
Optimizer

@Optimizer 첫 번째 입력 번호는 작업중인 필드 / 정수를 결정합니다. 숫자가 0이 아닌 경우 해당 순서의 유한 필드를 처리하는 것입니다. 유한 순서 필드 p에는 요소가 {0, 1, ... , p-1}있으며 더하기 / 곱하기 모드에 p있습니다. 기본적으로 mod로 모든 계수를 줄이면 p좋습니다. 또한 루트, 즉 선형 인자 가 있으면 다항식에 연결될 때 (mod ) 중 하나 {0, ... , p-1}가 생성됩니다 . 0p
Justin

1
@flawr, 팩토링 오버에 대한 표준 접근법 은 적합한 헨젤 리프트 를 인수하는 것 Z입니다 . 그러나 골프 가능한 접근 방식은 아마도 요소의 높이에 대한 간단한 경계를 사용하고 무차별 강제하는 것입니다 (그리고 이것이 내가보고있는 경로입니다). Z/pZp
피터 테일러

답변:


17

GolfScript (222 바이트)

~.@:q@.0\{abs+}/2@,2/)?*or:^{\1$^base{^q- 2/-}%.0=1=1$0=q>+{{:D[1$.,2$,-)0:e;{.0=0D=%e|:e;(D(@\/:x@@[{x*~)}%\]zip{{+}*q!!{q%}*}%}*e+])0-{;0}{@;@\D.}if}do}*;\).^3$,)2/?<}do;][[1]]-{'('\.,:x;{.`'+'\+'x^'x(:x+x!!*+\!!*}%')'}/

온라인 데모

노트

  1. 입력 형식 n다음에는 가장 중요하지 않은 계수의 GolfScript 배열이옵니다. 예 0, x^5 + 5x^3 + x^2 + 4x + 1를 들어로 형식을 지정해야합니다 0 [1 0 5 1 4 1].
  2. 유한 한 분야에 걸쳐, 충분히 작은 정도의 다항식은 유한하게 만 관련되어 있습니다. 그러나 이것은 끝이 아닙니다 Z. 나는 Z편안한 형태의 Mignotte의 높이 경계를 사용하여 처리 합니다. 인수 분해의 높이 범위에 좋은 종이는 Z의 요인 [X]에 경계 , 존 애보트 2009 년 (링크 arxiv 프리 프레스에 있습니다 그의 이력서는이 인정 된 것을 말한다 기호 계산의 저널 ). 주어진 가장 편안한 형태는 L-2 규범과 관련이 있지만 바이트를 절약하기 위해 더 긴장을 풀고 대신 L-1 규범을 사용합니다. 그런 다음 재판 부서에 의한 무차별 강요의 경우입니다.
  3. 유한 필드에서 모든 다항식은 상수 곱하기 다항식이므로 모닉 다항식으로 시험 분할하고 필드의 역수를 저장합니다. 그러나, Z고리 일 뿐이므로, 비 모노 믹 후보 인자로 시험 분할을 수행해야합니다. 나는 주요 요소 나눗셈 테스트를 수행하고에 "오류"플래그를 누적하여 합리적인 수를 구현하지 않고 벗어날 수 있습니다 e.
  4. 포인트 2와 3은 모두 인수 분해의 경우 Z가 일반적으로 느리고 온라인 데모로 테스트 할 수 없음을 의미합니다. 그러나 공식 테스트 사례 중 가장 느린 것은 10 분이 걸리며 이는 "합리적인"시간 제한 내에 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.