소수 다항식


21

다항식이 주어지면 소수인지 확인하십시오.

다항식은입니다 ax^n + bx^(n-1) + ... + dx^3 + ex^2 + fx + g. 여기서 각 항은 음수가 아닌 정수로 곱한 상수 (계수)입니다 x. 계수가 0이 아닌 최고 전력을 차수라고합니다. 이 문제의 경우 최소 1의 다항식 만 고려합니다. 즉, 각 다항식에는 x. 또한 정수 계수가있는 다항식 만 사용합니다.

다항식을 곱할 수 있습니다. 예를 들어 (x+3)(2x^2-2x+3)같습니다 2x^3+4x^2-3x+9. 따라서, 2x^3+4x^2-3x+9에 반영 될 수 x+32x^2-2x+3그 복합 그래서.

다른 다항식은 인수 분해 할 수 없습니다. 예를 들어, 2x^2-2x+3임의의 두 다항식 (정수 다항식 또는 정수가 아닌 계수를 갖는 것)은 곱하지 않습니다. 따라서, 그것은 프라임 (환원 불가능이라고도 함)입니다.

규칙

  • 입력 및 출력은 모든 표준 방법을 통해 이루어질 수 있습니다.
  • 입력은과 같은 문자열,과 같은 2x^2-2x+3계수 목록 {2,-2,3}또는 유사한 수단 일 수 있습니다.
  • 출력은 소수 인 경우 진솔한 값이거나 복합적인 경우 거짓된 값입니다. 모든 소수에 대해 동일한 진실 값을, 모든 복합 다항식에 대해 동일한 거짓 값을 산출해야합니다.
  • 입력 값은 1도에서 10도까지입니다.
  • 인수 분해 (정수 또는 표현식) 또는 방정식 풀기를 위해 내장 도구를 사용할 수 없습니다.

참-프라임

x+3
-2x
x^2+x+1
x^3-3x-1
-2x^6-3x^4+2
3x^9-8x^8-3x^7+2x^3-10

거짓-복합

x^2
x^2+2x+1
x^4+2x^3+3x^2+2x+1
-3x^7+5x^6-2x
x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12

11
빠른 인터넷 검색에서 골프와 상관없이 어려운 문제입니다.
orlp

5
프라임으로 당신이 돌이킬 수없는 것을 의미한다고 생각하는 것이 맞 습니까? 그렇다면 다항식 인수 분해 에 관한 이 질문 의 변형입니다 .
피터 테일러

1
이 최근 논문 에 따르면 , " 우리는 주어진 다항식이 돌이킬 수 없는지 여부를 결정하는 데 관심이 있습니다. 결과적으로이 정보를 제공 할 간단한 테스트 나 기준이 바람직합니다. 불행히도, 모든 기준에 적용되는 기준은 없습니다 다항식의 클래스는 아직 고안되었습니다 .
피터 테일러

2
@AlexA.에는 일부 다항식에 대해 작동하는 많은 "if"테스트가 있지만 모든 다항식에 대해 작동하는 "if and only if"테스트가 필요합니다.
Peter Taylor

1
이것은 좋은 문제입니다! 일반적으로 다항식은 기본 링 (또는 필드)에 대해서만 소수 입니다. 특히, 필드가 복소수 인 경우 2보다 큰 차수의 다항식은 소수입니다. 따라서 Rational (아마도 가장 간단한) 정수 (정수 인수 포함)를 원하는지 또는 숫자 m을 원하는지 여부를 지정합니다. m이 소수이면 다소 쉬운 알고리즘이 있습니다. 그렇지 않으면 상황이 좀 더 까다 롭습니다 ... (하지만 실행 가능)
cody

답변:


3

수학, 224 바이트

f@p_:=(e=p~Exponent~x;r=Range[⌈e/-4⌉,(e+2)/4];e<2||FreeQ[PolynomialRemainder[p,Thread@{r,#}~InterpolatingPolynomial~x,x]&/@Tuples[#~Join~-#&[Join@@Position[#/Range@Abs@#,_Integer]]&/@#]~DeleteCases~{(a_)..},0|{}]&[p/.x->r])

설명 :

크로네 커의 방법 이 여기에 사용됩니다. 이 방법은 특정 하위 다항식을 생성하고 원래 다항식의 요인이 있는지 테스트합니다.

테스트 사례 :

f/@{x+3, -2x, x^2+x+1, x^3-3x-1, -2x^6-3x^4+2, 3x^9-8x^8-3x^7+2x^3-10}
(* {True, True, True, True, True, True} *)

f/@{x^2, x^2+2x+1, x^4+2x^3+3x^2+2x+1, -3x^7+5x^6-2x, x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12}
(* {True, True, True, True, True} *)

그것이 내 노트북에 14 초가 걸린다는 결론을 내 렸습니다 3x^9-8x^8-3x^7+2x^3-10.


1

PARI / GP, 16 바이트, 지옥만큼 저렴

어떤 이유로 든 이것이 허용되지 않았습니다 (명령이 인수 또는 방정식 해결을 고려하지 않음).

polisirreducible

테스트 사례

%(x^2+x+1)

1(true)를 반환합니다 . 다른 예제도 비슷하게 작동합니다.

그러나 이것이 어려운 방법이라는 것을 보여주기 위해 여기에 완전한 해결책이 있습니다.

저렴하지만 sloooooooooow

이 골프는 정말 포인트가 없습니다.

Beauzamy(P)=
{
  my(d=poldegree(P),s,c);
  s=sum(i=0,d,polcoeff(P,i)^2/binomial(d,i));
  c = 3^(3/2 + d);
  c *= s / (4*d*Pi);
  abs(c * pollead(P))
}
factorpol(P)=
{
  my(B=Beauzamy(P)\1, t=B*2+1, d=poldegree(P)\2, Q);
  for(i=0,t^(d+1)-1,
    Q=Pol(apply(n->n-B, digits(i,t)));
    if(Q && poldegree(Q) && P%Q==0, return(Q))
  );
  0
}
irr(P)=
{
  factorpol(P)==0
}

편집자 : 논평자는 첫 번째 방법이 좋은 맛, 규칙의 정신, 제네바 협약, 표준 허점 규칙 등에 의해 허용되지 않을 수 있다고 지적했습니다. 동의하지 않지만 어쨌든 두 번째 버전을 첫 번째는 물론 수용 가능한 것 같습니다.


1
흠 ... 나는이 명령 후드 아래에서 방정식을 고려하거나 풀고 있다고 확신합니다 . (또한 도전이 특정 내장을 허용하지 않으면 문제를 해결하는 내장 기능도 도전 정신이 아니라는 것을 암시합니다.)
Martin Ender

@ MartinBüttner : 첫 번째 답변은 도전의 규칙의 글자가 아니라 정신에 맞다고 생각합니다. 그렇기 때문에 합법적 인 솔루션 인 두 번째 버전을 작성했습니다. 그것은 x^4+1(거의 모든 주요한 감소 가능한 모드) 86 밀리 초 안에 돌이킬 수 없는지 확인할 수 있습니다 . 다른 사람이이 버전을 채택하고 골프를 칠 수 없다면.
찰스

1
첫 번째 답변은 허점에 빠지는데 기본적으로 금지되어 있습니다. 내장 함수를 사용하여 작업하기 . 답변에서 삭제하거나 적어도 유효한 솔루션이 아님을 표시하십시오.
isaacg

5
@isaacg 현재 유효한 표준 허점이 아닙니다 (투표 분석 + 44 / -29로 인해). 당신은 단지 두 번째 대답은 정말 합법적인지 동의하면 찰스는 다음을 포함해야 대신 바이트 수를.
Martin Ender

@ MartinBüttner : 나는하지 않습니다-나는이 질문의 규칙과 일반적인 허점 스레드에 의해 합법적이라고 생각합니다. 그러나 문제를 지적하기 위해 의견을 추가했습니다.
찰스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.