본문 바로가기
Computer Science/PS

[백준 3904] The Teacher's Side of Math (Diamond IV)

by invrtd.h 2023. 1. 12.

https://www.acmicpc.net/problem/3904

 

3904번: The Teacher's Side of Math

One of the tasks students routinely carry out in their mathematics classes is to solve a polynomial equation. It is, given a polynomial, say X24X+1, to find its roots (2±3). If the students’ task is to find the roots of a giv

www.acmicpc.net

 

 am+bn를 근으로 갖는 정수 계수 mn차 다항식을 찾는 문제다. gaussian elimination을 전혀 사용하지 않는 풀이를 소개한다.

 

 일단 b = 0일 때 am를 근으로 갖는 정수 계수 m차 다항식이 xma라는 사실은 너무나 쉽게 찾아줄 수 있다. a = 0일 때도 똑같이 해 줄 수 있다. f=xma,g=xnb라 놓고, 두 방정식의 영점 집합을 각각 A,B라 하자. 이제 다음 집합

 

A+B={x+y:xA,yB}

 

 의 모든 원소를 영점으로 갖는 정수 계수 다항식이 정답이 된다. 이러한 다항식이 정수 계수일 것이라고 감을 잡는 것은 쉽지만 엄밀한 증명은 어려운데, 어차피 찾는 과정에서 다 증명이 되므로 일단은 대충 넘어가도록 하자.

 

 물어보는 것은 am+bn에 대해서만 물어보았지만 결국 정답이 A + B의 모든 영점이기 때문에 A의 모든 근과 B의 모든 근을 뭉탱이로 묶어서 생각하는 태도가 중요하며, 이를 위해 다음 행렬

 

[000a100001000010]

 

 이 characteristic polynomial로 xma를 가진다는 사실을 이용하기로 한다. 이제 우리가 필요한 것은 임의의 두 행렬 X, Y에 대해 X의 고유치들의 집합을 x, Y의 고유치들의 집합을 y라고 했을 때 x + y를 고유치들로 갖는 어떤 행렬 Z이며, 약간의 자료 조사를 통해 이런 행렬을 얻는 방법이 Kronecker Addition이라는 사실을 알 수 있다. (https://en.wikipedia.org/wiki/Matrix_addition) 결국 f, g를 각각 행렬 F, G로 변환하고, F와 G의 Kronecker sum에 해당하는 H를 구한 뒤, H의 characteristic polynomial을 구해주면 된다. 총 시간복잡도는 O((mn)^4)이다. characteristic polynomial은 위키피디아를 뒤져보면 정말 간단히 구현할 수 있는 알고리즘이 하나 있다(https://en.wikipedia.org/wiki/Faddeev%E2%80%93LeVerrier_algorithm). 이 알고리즘을 사용하면, 연산 과정에서 나눗셈이 들어가기는 하나 이 나눗셈의 결과가 항상 정수라는 것을 증명할 수 있으므로, long long을 사용하면 실수 오차 없이 구현할 수 있다.

 

 

댓글