프로그램 명: gcdCount
제한시간: 1 초

두 수 a, b (1 <= a <= b, 1 < b)가 주어질 때 최대공약수를 구하는 함수 gcd는 다음과 같다.

int gcd(int a,int b) {
    if( b%a == 0 )
        return a;
    else
        return gcd(b%a,a);
}
피에로는 시험공부하는 것보다 gcd 함수가 재귀적으로 몇 번 호출되는지가 더 궁금할 뿐이다.

예를 들어 gcd(9, 15)는 재귀함수가 총 3번 호출된다.

gcd(9, 15) -> gcd(6, 9) -> gcd(3, 6)

피에로는 모든 i, j 쌍에 대해 (1 <= i <= j, 1 < j) gcd(i,j)의 최대 호출 횟수가 궁금하다.

n이 주어질 때, i, j <= n 을 만족하는 모든 i, j 쌍들 중 호출되는 재귀함수의 최대 수를 구해서 출력하자.

입력

출력

각 테스트케이스에 대하여 최대 호출횟수를 출력한다.

입출력 예

입력

3
3
7
10

출력

2
3
4

입출력 보충

2번째 테스트케이스 n=7일 경우, (i=4, j=7)일 때 gcd(4,7) -> gcd(3,4) -> gcd(1,3)으로 재귀함수가 3번 호출된다. (3,5), (5,7)의 경우에도 재귀함수는 3번 호출된다.

gcd(i,j) 함수가 호출되는 경우는 1 <= i <= j, 1 < j 가 성립할때입니다.
gcd(3,2) 와 같이 위의 i,j 값이 성립하지 않는 경우는 "세지" 않습니다.

출처:Fate

[질/답] [제출 현황] [푼 후(0)]
[ 채 점 ] [홈으로]  [뒤 로]