시간을 달려서 (Rough)
시간 제한1초메모리 제한1024 MB
시간 0에서 시작해 x+1과 2x로 이동하되 F 이상이 되면 F로 나눈 나머지로 바뀌는 규칙 아래, 시간 G에 도착하는 최소 이동 횟수를 구한다.
문제
미처 말하지 못했어
다만 너를 좋아했어
어린 날의 꿈처럼 마치 기적처럼
시간을 달려서 어른이 될 수만 있다면
거친 세상 속에서 손을 잡아줄게
나는 시간을 달려서 너를 만나고자 한다.
나와 네가 있는 세계에서 시간은 음이 아닌 정수로 나타낼 수 있다.
처음에 나는 시간 에 있고, 너는 시간 에 있다.
시간 에 있는 내가 시간을 달려 이동할 수 있는 방법은 2가지가 있다.
- 로 이동한다
- 로 이동한다
내가 있는 시간은 이상한 구조로 되어 있기 때문에, 이동한 뒤 나의 시간이 이상이라면 나는 시간으로 이동하게 된다. 여기서 란 를 로 나눈 나머지를 의미한다.
내가 시간 속에 갇혀 길을 헤매지 않도록, 너의 시간에 도착하기 위해 시간을 달려 이동하는 횟수의 최솟값을 구하여라.
입력
첫째 줄에 양의 정수 가 주어진다.
출력
첫째 줄에 시간을 달려 이동하는 횟수의 최솟값을 출력하라.
제한
힌트
입력이 C/C++의 int 범위를 넘어갈 수 있으므로 long long 자료형을 사용하는 것을 추천한다.