요세푸스, 한 번 더!
시간 제한2초메모리 제한128 MB
원탁에 앉은 N명을 0번부터 시작해 f(x)=(a x^2+b) mod N 규칙으로 차례로 지목한다. 두 번째 지목된 사람만 술을 마시고 세 번째 지목이 나오면 모두 집으로 가므로, 술을 마시지 못한 사람 수를 구한다.
문제
프로 드링커 상근이는 술을 마실 때 요세푸스 문제와 똑같은 순서로 마신다. 요세푸스 문제를 천 번 넘게 풀어 본 상근이는 마지막에 술을 마시는 사람의 위치를 머릿속으로 계산할 수 있다. 그래서 함께 마시는 친구들은 상근이를 이기기 위해 새로운 순서를 제안했다.
먼저 모두 원탁에 둘러앉는다. 총 명이 앉으면 각 사람의 번호는 번부터 번까지가 된다.
기존 요세푸스 문제와 달리, 다음 사람을 고를 때 두 정수 와 를 사용한다. 현재 지목된 사람의 번호가 이면, 다음 사람의 번호는 이다.
가장 먼저 지목되는 사람은 번이고, 그 다음부터는 위 식으로 차례차례 고른다.
각 사람은 기회를 한 번 더 받는다. 즉, 한 번 지목되면 술을 마시지 않고, 두 번째로 지목됐을 때 비로소 술을 마신다.
만약 어떤 사람이 세 번째로 지목되면, 그 즉시 모두 자리를 박차고 일어나 집으로 간다.
과 , 가 주어졌을 때, 술을 마시지 않고 집으로 가는 사람의 수를 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄이며, 세 정수 , , 가 공백으로 구분되어 주어진다. (, ) 또한 첫 번째 사람이 술을 마시기까지 필요한 단계의 수는 보다 작다. 입력의 마지막 줄에는 이 하나 주어진다.
출력
각 테스트 케이스마다 술을 마시지 않고 집으로 가는 사람의 수를 한 줄에 하나씩 출력한다.
힌트
이 문제는 사람들이 원형으로 둘러앉아 정해진 규칙에 따라 한 명씩 지목되는 고전 요세푸스 문제의 변형이다.