공통 다항식

시간 제한1초메모리 제한128 MB

요약
괄호와 지수를 포함한 다항식 두 개를 파싱해 전개한 뒤 최대공약 다항식을 계산하여 정규화된 형식으로 출력하는 문제입니다.
난이도

보통10점 중 7점

유형
수학, 재귀, 구현
정답자
아직 제출이 없습니다

문제

한 변수 xx에 대한 다항식 중에서 모든 계수가 정수인 다항식을 정수 다항식이라고 한다.

두 정수 다항식 AA, BB에 대하여, 어떤 정수 다항식 XX, YY가 존재하여 A=C⋅XA = C \cdot X이고 B=C⋅YB = C \cdot Y가 되는 정수 다항식 CC를 AA와 BB의 공약수라고 부른다.

두 다항식의 최대공약수는 이러한 공약수 중에서 차수가 가장 큰 것을 뜻한다. 상수배를 무시하면 최대공약수는 유일하게 정해진다. 즉 CC와 DD가 모두 AA, BB의 최대공약수이면, p⋅C=q⋅Dp \cdot C = q \cdot D를 만족하는 음이 아닌 정수 pp, qq가 존재한다.

두 정수 다항식 AA, BB가 주어질 때 이들의 최대공약수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 두 줄로 이루어지며, 각 줄에 다항식이 하나씩 주어진다. 다항식은 다음 규칙에 따라 표기된다.

  1. 기본항은 변수 x, 상수(숫자 0~9), 또는 괄호로 감싼 식이다. 예: x, 99, (x+1)
  2. 인수는 기본항 뒤에 ^와 지수(숫자)를 붙여 나타낸다. 예: x^05, 1^15, (x+1)^3
  3. 항은 여러 인수의 곱으로 나타낸다. 예: 4x, (x+1)(x-2), 3(x+1)^2
  4. 다항식은 하나 이상의 항을 + 또는 -로 이어 쓴 것이다. 첫 항은 -로 시작할 수 있다. 예: -x+1, 3(x+1)^2-x(x-1)^2

숫자가 여러 자리로 붙어서 주어지면 그대로 하나의 상수로 해석한다. 즉 99는 9×99 \times 9가 아니라 9999이다.

입력으로 주어진 다항식을 모두 전개했을 때, 각 계수는 100100 이하이고 xx의 차수는 1010 이하이다. ^ 뒤에 오는 지수는 항상 음이 아닌 정수이다. 올바르게 계산했을 때 32비트 정수로 계산할 수 있는 데이터만 주어진다(오버플로가 없다).

출력

각 테스트 케이스마다 입력으로 주어진 두 다항식의 최대공약수를 다음 형식으로 출력한다.

c0x^p0±c1x^p1±...±cnx^pn

cic_i는 양의 정수, pip_i는 음이 아닌 정수이며 p0>p1>⋯>pnp_0 > p_1 > \dots > p_n을 만족한다. 계수들의 최대공약수 gcd⁡(c0,…,cn)\gcd(c_0, \dots, c_n)은 11이다. 각 항 사이의 ±는 그 항 계수의 부호에 따라 + 또는 -가 되고, 첫 항 c0xp0c_0 x^{p_0} 앞에는 부호를 붙이지 않는다.

또한 다음 규칙을 지켜야 한다.

  1. cic_i가 11이고 pip_i가 00이 아니면 cic_i를 생략한다.
  2. x0x^0은 생략한다.
  3. x1x^1은 x로 쓴다.

예제7

  1. 예제 1

    입력
    3
    -(x^3-3x^2+3x-1)
    (x-1)^2
    x^2+10x+25
    x^2+6x+5
    x^3+1
    x-1
    
    예상 출력
    x^2-2x+1
    x+5
    1
    
  2. 예제 2

    입력
    1
    x^2-1
    x-1
    
    예상 출력
    x-1
    
  3. 예제 3

    입력
    1
    x
    x+1
    
    예상 출력
    1
    
  4. 예제 4

    입력
    1
    2x+2
    4x+4
    
    예상 출력
    x+1
    
  5. 예제 5

    입력
    1
    -x^2+1
    x-1
    
    예상 출력
    x-1
    
  6. 예제 6

    입력
    1
    (x-1)^2(x+2)
    (x-1)(x+2)^2
    
    예상 출력
    x^2+x-2
    
  7. 예제 7

    입력
    1
    x^05
    x^02
    
    예상 출력
    x^2