다항식의 요인입니까?


11

함수의 (x-n)경우 다항식은 인수로 나눌 수 f(n)=0있습니다 f. 직업 : 다항식 함수 f(x)를로 나눌 수 있는지 확인하십시오 (x-n).

입력

입력 형식은 (x-n), (Polynomial)입니다. n이 음수이면 (x-n)입력 형식은(x+n) 입니다. 다항식의 경우 모든 지수는로 입력됩니다 ^. 변수 옆에 계수가 기록됩니다 x. 다항식의 예는 다음과 같습니다 2x^2 + x^1. 사이에는 공백이 없습니다. 이 용어 x는로 입력됩니다 x^1. "정상적으로"어떤 모양이 (x - 1)될 것 (x^1-1)입니다. 계수와 거듭 제곱은 항상 정수입니다. 계수 1은 단지 묵시적 x입니다. 즉, 다음 x과 같이 해석 될 수 있습니다1x

출력

부울 값 Truthy 또는 Falsey.

@AlexA에게 감사합니다. 이것을 명확히 도와 주셔서 감사합니다!

Input:(x^1-1),(x^1-1)
Output: True

Input: (x^1+2),(2x^2+4x^1+2)
Output: False

Input: (x^1+7),(x^2-49)
Output: True

규칙

  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.

불행히도, 스 니펫 리더 보드를 구현하는 방법을 모르겠습니다. 누구나 방법을 알고 있다면 게시물을 자유롭게 편집하십시오.


입력이 정확한 형태의 문자열입니까, 즉 제수 후보 주변의 파 렌스, 0 또는 1 공백의 쉼표 및 다항식의 파엔입니까?
Alex A.


분명히 복제본이 아닙니다.
intboolstring

@intrepidcoder 질문이 다항식을 고려하지 않기 때문에 이것은 중복이 아닙니다. 다항식을 선형 인수로 나눌 수 있는지 확인해야합니다.
intboolstring

다항식 계수는 항상 정수입니까?
Digital Trauma

답변:


5

Pyth-39 바이트

이것은 정규 표현식과 평가의 괴물 조합입니다. 나는 접근 방식을 좋아하지만 구현을 개선하려고 노력할 것입니다.

다항식 나머지 정리를 사용합니다 .

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

평가 사용으로 인해 온라인에서 작동하지 않습니다.


3

카시오 베이직, 19 바이트

judge(mod(b,a)=0

결과적으로 fx-CP400은 mod대수적 표현을 할 수 있습니다 !

다항식과 인수를 표현식으로 입력해야합니다. 코드의 경우 16 바이트 a,b, 매개 변수 값 상자에 3 바이트 입력


1

MATLAB, 103 99 97 95 93 바이트

나는 다른 것들을 시도하고 있는데, 이것을 사용하여 몇 바이트를 절약 할 수 있습니다.

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

더 줄일 수 있다면 설명을 게시 할 것입니다.


오래된 코드 설명

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

이것은 Octave 에서도 작동합니다 . 당신은 할 수 있습니다 온라인으로보십시오 . 프로그램을이라는 스크립트로 저장 isFactor.m했으므로 isFactor프롬프트에서 입력 하면됩니다. [참고 : Octave에서 실행하는 동안 경고가 표시됩니다-MATLAB은이를 생성하지 않습니다].

입력은 '(x^1+7),(x^2-49)'질문 에 따른 형식이어야합니다 . 따옴표는 MATLAB / Octave가 문자열임을 알 수 있도록 추가됩니다.

출력은 참인지 거짓인지에 따라 a 0또는 a 1입니다.


따라서 코드는 다음과 같이 작동합니다. 먼저 입력을 요청한 다음 구문 분석합니다. 구문 분석 문자열 (x^1은 문자열 에서 첫 번째 이후의 부호있는 숫자를 추출합니다 n. 이는 우리의 값입니다 . 그런 다음 입력 %s후 문자열 ( )을 계속 추출합니다 ),. 이것이 우리의 표현입니다.

t=sscanf(input(''),'(x^1%d),%s')';

다음으로, 우리는 값을 추출하고 그것과 동일하게 n설정 x합니다. 우리는 때 표현식이 0인지 여부를 평가할 n==x것이므로 x에 값을 저장합니다. 또한 파싱 할 때 빼기 기호 때문에 추출 된 숫자를 무효화합니다.

x=-t(1);

그런 다음 부울 출력을 표시합니다

disp(

출력은 기본적으로 평가 된 방정식의 논리적 부정입니다. 경우 f(x)제로이며,이 1을 반환합니다 그렇지 않으면 제로가 발생합니다.

     ~eval(

입력 식을 평가하고 있지만이를 위해서는 MATLAB이 이해할 수 있도록 약간의 형식을 다시 지정해야합니다. 문자열을 읽을 때 실제로 문자열은 double유형 의 배열 이므로 문자 배열로 변환해야합니다. 변환하기 전에 우리가 사용한 첫 번째 요소도 제거합니다 n. 그런 다음 MATLAB이 계산할 수 있도록 발생하는 항목 x앞에는 숫자 (예 4x:)가 같지만 곱하기 ( *)가 있어야합니다.

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)

1

VBScript, 118116 바이트

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

입력의 첫 번째 부분이 선형 다항식이라는 것을 알고 있기 때문에 그 근이 두 번째 다항식의 근과 일치하는지 확인하면됩니다. 필요에 따라 eval삽입 하여 용어를 준비해야 *합니다.


1

공리 77 180 바이트

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

이전 솔루션

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

정도 (b)> = degree (a) 내가 쓴 하나의 버그라고 가정하기 때문에 잘못되었습니다 ... 테스트 및 결과

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.