요세푸스, 한 번 더!

시간 제한2초메모리 제한128 MB

요약
원탁에 앉은 N명을 0번부터 시작해 f(x)=(a x^2+b) mod N 규칙으로 차례로 지목한다. 두 번째 지목된 사람만 술을 마시고 세 번째 지목이 나오면 모두 집으로 가므로, 술을 마시지 못한 사람 수를 구한다.
난이도

보통10점 중 7점

유형
시뮬레이션, 수학, 구현
정답자
아직 제출이 없습니다

문제

프로 드링커 상근이는 술을 마실 때 요세푸스 문제와 똑같은 순서로 마신다. 요세푸스 문제를 천 번 넘게 풀어 본 상근이는 마지막에 술을 마시는 사람의 위치를 머릿속으로 계산할 수 있다. 그래서 함께 마시는 친구들은 상근이를 이기기 위해 새로운 순서를 제안했다.

먼저 모두 원탁에 둘러앉는다. 총 NN명이 앉으면 각 사람의 번호는 00번부터 N−1N-1번까지가 된다.

기존 요세푸스 문제와 달리, 다음 사람을 고를 때 두 정수 aa와 bb를 사용한다. 현재 지목된 사람의 번호가 xx이면, 다음 사람의 번호는 (ax2+b) mod N(a x^2 + b) \bmod N이다.

가장 먼저 지목되는 사람은 00번이고, 그 다음부터는 위 식으로 차례차례 고른다.

각 사람은 기회를 한 번 더 받는다. 즉, 한 번 지목되면 술을 마시지 않고, 두 번째로 지목됐을 때 비로소 술을 마신다.

만약 어떤 사람이 세 번째로 지목되면, 그 즉시 모두 자리를 박차고 일어나 집으로 간다.

NN과 aa, bb가 주어졌을 때, 술을 마시지 않고 집으로 가는 사람의 수를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄이며, 세 정수 NN, aa, bb가 공백으로 구분되어 주어진다. (2≤N≤1092 \le N \le 10^9, 0≤a,b<N0 \le a, b < N) 또한 첫 번째 사람이 술을 마시기까지 필요한 단계의 수는 10610^6보다 작다. 입력의 마지막 줄에는 00이 하나 주어진다.

출력

각 테스트 케이스마다 술을 마시지 않고 집으로 가는 사람의 수를 한 줄에 하나씩 출력한다.

힌트

이 문제는 사람들이 원형으로 둘러앉아 정해진 규칙에 따라 한 명씩 지목되는 고전 요세푸스 문제의 변형이다.

예제5

  1. 예제 1

    입력
    2 1 1
    5 1 1
    10 3 7
    101 9 2
    698253463 1 181945480
    1000000000 999999999 999999999
    0
    
    예상 출력
    0
    2
    4
    96
    698177783
    999999994
    
  2. 예제 2

    입력
    2 0 0
    0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2 0 1
    0
    
    예상 출력
    1
    
  4. 예제 4

    입력
    3 1 1
    0
    
    예상 출력
    2
    
  5. 예제 5

    입력
    2 0 0
    3 1 1
    4 1 1
    0
    
    예상 출력
    1
    2
    2