아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이중 딜링

시간 제한15초메모리 제한32 MB

요약
카드를 나눠 준 뒤 다시 모으는 과정을 반복해 처음 순서로 돌아오는 데 필요한 횟수를 구한다.
난이도

보통10점 중 7점

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

문제

nn장의 서로 다른 카드로 이루어진 덱이 있습니다. 이 덱 전체를 kk명의 플레이어에게 일반적인 방식으로 나눠 줍니다. 맨 위 카드는 1번 플레이어에게, 다음 카드는 2번 플레이어에게, kk번째 카드는 kk번 플레이어에게, k+1k+1번째 카드는 다시 1번 플레이어에게 주는 식으로 덱이 모두 소진될 때까지 반복합니다.

카드를 모두 나눈 뒤에는 다시 모읍니다. 1번 플레이어의 카드 묶음을 맨 위에 놓고, 그 아래에 2번 플레이어의 묶음을, 이런 식으로 이어 쌓아 kk번 플레이어의 묶음이 맨 아래에 오도록 합니다. 각 플레이어의 묶음은 카드를 받은 순서의 역순으로 놓입니다. 즉, 가장 마지막에 받은 카드가 맨 위에, 가장 먼저 받은 카드가 맨 아래에 옵니다.

처음 한 번을 포함하여, 이 과정을 몇 번 반복해야 덱이 원래 순서로 돌아오는지 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 케이스는 두 정수 nn과 kk (1≤n≤8001 \le n \le 800, 1≤k≤8001 \le k \le 800)가 공백으로 구분되어 한 줄에 주어집니다. 입력의 끝은 두 개의 00으로 이루어진 줄로 표시됩니다.

출력

각 테스트 케이스마다 덱이 원래 순서로 돌아오기까지 필요한 나눠 주기 횟수를 정수 하나로 한 줄에 출력하세요. 각 정수는 별도의 줄에 출력하며, 불필요한 공백이나 답 사이의 빈 줄이 없어야 합니다. 모든 입력에 대한 답은 부호 있는 64비트 정수 범위 안에 들어갑니다.

예제1

  1. 예제 1

    입력
    1 3
    10 3
    52 4
    0 0
    
    예상 출력
    1
    4
    13