소수 다항식


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+3및 2x^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.