소규모 학급 Y는 오프 바보 바보짓, 그는 종이 X와 Y에 두 개의 임의의 숫자를 썼다 이제 그는이 과정을 더 재미있게 만들기 위해, 어떤 방법으로 Y X가되고 싶다, 그래서 그는 자신 만의 두 가지 작동 모드를 사용 제한 :
(1) 현재의 X 별 두
2, 현재 X 다른 이름으로 저장
때문에 교실에서 제한된 시간, 그래서 그는이 프로세스를 달성하기위한 동작의 최소 수를 사용 하였다. 수업 후, QZ 통과하는 X와 Y Y, 그는 작업의 수와 두 번째 작은 Y에서 알 말한다 종이의 작은 조각을 참조하십시오. 그래서 질문은 몇 번 작동합니까 결국 작은 Y와 함께, 무엇입니까?
기입
두 숫자의 X 및 Y를 나타낸다 . 1 <= X <= 1,000,000,000 . 1 <= Y <= 1,000,000,000
수출
Y는 X가된다이다 수많은 동작의 최소 개수를 요구
샘플 INPUT
1 1000000000
샘플 출력
(39)
다음에, Y는 X가 두 개의 동작 모드를 고려해 1.y / = 2 2.y + = 1;
y는 다음 만 번째 실행 홀수 인 경우 Y + = 1 짝수된다
Y가 짝수 일 때, 직접 이외에 후, Y / 2로 고려 그것은지면 / 2 + 1, 제 첨가에 연결되는 Y, 단계 (2)의 동작이, 그렇지 않으면 다음 2/2의 동작을 추가 단계 3]
이므로 짝수위한 부가 더하도록 함께,
그 전체 용액 나온 / 2의 짝수 번호, Y <X의 경우, 그 수 플러스 (XY)이고;
#INCLUDE <cstdio> #INCLUDE <CString을> #INCLUDE <알고리즘> #INCLUDE <cstdlib> #INCLUDE <지도> #INCLUDE <iostream> #INCLUDE <CString을> #INCLUDE <문자열> 사용 스페이스 성병; CONST의 INT의 maxn = 2010; 타입 정의 오래 오래 LL; #DEFINE rdint (X)는 scanf ( "%의 D ', X) #DEFINE의 INF 0x3f3f3f3f INT X, Y; INT의 main () { rdint (X); rdint (Y); INT 미네소타 = INF; INT CNT = 0; (1) {동안 경우 (X == Y) 체류; (2 == 0 && Y> X Y %)의 {경우 CNT ++; Y / 2 =; } 다른 경우 (Y> X && Y % 2 == 1) { CNT ++; Y + = 1; Y에서의 X =; 단절; } } COUT << CNT << ENDL; 시스템 ( "중지"); 0을 반환 //; }