Fractran
시간 제한1초메모리 제한128 MB
분수 목록과 시작값이 주어질 때, 곱한 결과가 정수가 되는 첫 번째 분수를 계속 곱해 나가며 수열에 나타나는 2의 거듭제곱의 지수를 처음 m개 출력한다.
문제
주어진 분수 목록 와 시작 정수 에 대한 "분수 게임"은 다음과 같이 진행한다. 현재 가지고 있는 정수(처음에는 )에, 곱한 결과가 정수가 되는 목록 중 가장 앞선 를 곱한다. 그런 가 하나도 없으면 게임을 멈춘다.
엄밀하게, 수열을 으로 정의하고 로 정의한다. 여기서 는 범위에서 는 정수이면서 는 모두 정수가 아닌 가장 작은 첨자이다.
예를 들어 여덟 개의 분수 , , , , , , , 과 로 시작하면 유한 수열 가 만들어진다. 일반적으로 이 수열은 무한할 수도 있다.
분수 목록과 시작 정수가 주어질 때, 우리는 이 수열에 나타나는 의 거듭제곱에만 관심이 있다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 세 정수 , , 로 시작하며 , , 을 만족한다. 그 뒤에 개의 분수 가 이어지며, 각 분수는 분자를 먼저, 분모를 나중에 준다. 분자와 분모는 모두 보다 작은 양의 정수이고 서로소이다(최대공약수가 ). 마지막 테스트 케이스 뒤에는 하나가 온다.
출력
각 테스트 케이스마다 한 줄에 개의 수 을 공백 하나로 구분하여 출력한다. 이때 은 수열에 나타나는 의 거듭제곱 중 처음 개이다. 수열의 처음 개 원소 안에 의 거듭제곱이 적어도 개 존재한다고 가정해도 된다.