첫째 줄에 테스트 케이스의 개수 t가 주어진다. (0 < t < 100) 각 테스트 케이스는 한 줄로 이루어져 있고, K와 C가 공백으로 구분되어져서 주어진다. (1 ≤ K, C ≤ 109) 선영이는 부자가 아니기 때문에 10^9개를 넘는 사탕 봉지를 구매하지 못한다.
출력
각 테스트 케이스에 대해서 문제의 조건을 만족시키면서 구매할 수 있는 사탕 봉지가 없다면, "IMPOSSIBLE"을 출력한다. 이 경우가 아닌 경우에는 선영이가 구매해야 하는 사탕 봉지의 수를 출력한다. 만약, 가능한 봉지의 수가 여러개라면 아무거나 출력한다.
입력 예시
51051071337 2312345432142999999937142857133
출력 예시
IMPOSSIBLE
3
872
14696943
166666655
풀이
우리가 구하고 싶은 값은 사야 하는 봉지의 수 X'이다. (X'은 자연수)
수식으로 나타내 보면, KX + 1 = CX', -KX + CX' = 1이 성립한다.
우선 특이사항인 경우를 살펴보자.
K == C == 1 : 이 경우 X+1 = X' 이고, X >= 1이므로 X' >= 2이다. 따라서 2를 출력해주면 된다.
K == 1 : 이 경우 CX' = X + 1이다. (X == X' == 1)일때 이 식이 성립하므로, 1을 출력해주면 된다. 문장으로 풀어서 쓰면, 사탕을 나누어 주는 사람 수는 한 명이므로 한 봉지만 사도 충분하다.
C == 1 : 이 경우 KX + 1 = X'이 된다. 이 식을 가장 쉽게 만족시키는 (X, X') 쌍은 (1, K+1)이다. 따라서 K+1을 출력하면 된다. 문장으로 풀어서 쓰면, 봉지에 사탕 수가 1개밖에 없으니 사람수 + 1봉지를 사면 된다. 주의할 점은 K+1 이 최대로 살 수 있는 봉지값을 넘는지 검사해야 한다는 점이다.
이쯤이면 됬고, 우리는 이제 -KX + CX' = 1을 만족하는 순서쌍을 빠른 시간 내에 찾아낼 수 있어야 한다. 이를 풀기 위해서 배주 항등식과 확장 유클리드 호제법 개념을 이용하는 게 문제의 핵심이다. 공부한 내용을 정리할 겸 설명해보자.
임의의 정수 a, b에 대해 ax + by = gcd(a, b) 항등식에서, 이를 만족하는 정수쌍 (x, y)가 존재함과 동시에 gcd(a, b)는 ax + by 형태로 표현할 수 있는 가장 작은 자연수가 된다. 이것이 배주 항등식의 핵심이다.