이집트 분수
시간 제한1초메모리 제한128 MB
M/N을 이집트 분수로 나타내되 각 나머지의 분모가 1,000,000 미만이 되도록 그리디로 전개하고, 단위 분수의 분모를 출력한다.
문제
고대 이집트인은 분수를 표현하는 독특한 방법을 사용했다. 분자가 인 분수, 즉 단위분수 를 나타내는 상형문자를 만들고, 이 단위분수들을 더해서 다른 분수를 나타냈다. 이 방식으로는 분자가 보다 큰 분수를 직접 쓸 수 없었기 때문에, 언제나 단위분수의 합으로 분수를 표현했다.
예를 들어 는 다음과 같이 나타낼 수 있다.
하나의 분수를 나타내는 방법은 여러 가지일 수 있다. 예컨대 는 다음처럼 쓸 수도 있다.
분수 이 주어졌을 때, 이 분수를 그리디(greedy) 방법으로 단위분수의 합으로 나타내려고 한다. 그리디 방법이란, 현재 남은 분수에서 뺄 수 있는 가장 큰 단위분수를 골라 빼는 과정을 남은 분수가 이 될 때까지 반복하는 방법이다. 예를 들어 에 그리디 방법을 적용하면 다음과 같다.
다만 단위분수의 분모가 지나치게 커지는 것을 막기 위해 다음 제한을 둔다. 단위분수를 하나 뺀 뒤에 남는 분수(기약분수)의 분모는 항상 보다 작아야 한다. 만약 뺄 수 있는 가장 큰 단위분수를 뺐을 때 남는 분모가 이상이 된다면 그 단위분수는 사용할 수 없다. 이때는 분모를 씩 키운 그다음 단위분수( 대신 )를 차례로 시도하여, 남는 분모가 보다 작아지는 가장 큰 단위분수를 사용한다.
예를 들어 에서 시작하면 처음 두 단위분수는 와 가 되고 이 남는다. 이 상태에서 뺄 수 있는 가장 큰 단위분수는 이지만,
처럼 남는 분모가 을 넘는다. 따라서 는 쓸 수 없고, 그다음 단위분수인 을 빼면
가 되어 조건을 만족한다. 결국 정답은 다음과 같다.
모든 분수는 분모가 모두 같은 단위분수의 합으로도 나타낼 수 있다. 예를 들어 은 을 번 더한 것과 같다. 따라서 이 방법으로 표현하지 못하는 분수는 없다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 두 정수 과 이 공백으로 구분되어 주어지며 분수 을 뜻한다. 이고, 과 의 최대공약수는 항상 이다. 입력의 마지막 줄에는 0 0 이 주어지며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다, 위에서 설명한 그리디 방법으로 얻은 단위분수들의 분모 를 한 줄에 공백으로 구분하여 출력한다. 즉
를 만족하도록 하며, 의 순서로 출력한다.