리벤지 오브 피보나치

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

요약
최대 50,000개의 질의에 대해 주어진 숫자열로 시작하는 피보나치 수 가운데 100,000 미만인 가장 작은 인덱스를 찾고, 없으면 -1을 출력한다.
난이도

보통10점 중 7점

유형
수학, 이분 탐색, 구현, 정렬
정답자
아직 제출이 없습니다

문제

피보나치 수열은 다음과 같이 정의된다.

  • F(0)=F(1)=1F(0) = F(1) = 1
  • F(n)=F(n−1)+F(n−2)F(n) = F(n-1) + F(n-2) (n≥2n \ge 2)

여기서 nn을 피보나치 수 F(n)F(n)의 인덱스라고 부른다.

피보나치 수열은 오래전부터 많은 사람이 연구해 왔고, 지금까지 수많은 성질이 밝혀졌다. 선영이는 피보나치 수를 연구하는 것을 무척 좋아한다. 관련 논문을 많이 읽은 선영이는 이제 더 이상 새로 밝혀낼 성질이 없다고 생각했다.

그날 밤 꿈에 피보나치가 나타나 이렇게 말했다. "아직 밝혀지지 않은 중요한 성질이 남아 있다네. 예를 들면, 피보나치 수 347746739..."

선영이는 잠에서 깨어나 뒤에 이어지는 숫자를 떠올리려 했지만 기억나지 않았다. 그래서 이 수가 무엇인지 알아내는 프로그램을 작성하려고 한다.

어떤 피보나치 수의 앞부분 몇 자리가 주어졌을 때, 그 숫자들로 시작하는 피보나치 수 중 인덱스가 가장 작은 것의 인덱스를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (T≤50,000T \le 50{,}000)

각 테스트 케이스는 한 줄로 이루어지며, 어떤 피보나치 수의 앞부분에 해당하는 숫자가 주어진다. 이 숫자는 최대 40자리이고, 맨 앞에 불필요한 0은 붙지 않는다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 여기서 xx는 테스트 케이스 번호(1부터 시작)이고, yy는 주어진 숫자로 시작하는 피보나치 수 중 가장 작은 인덱스이다.

인덱스가 100,000보다 작은 피보나치 수 중에서 주어진 숫자로 시작하는 것이 하나도 없으면 yy 자리에 −1-1을 출력한다.

예제2

  1. 예제 1

    입력
    15
    1
    12
    123
    1234
    12345
    9
    98
    987
    9876
    98765
    89
    32
    51075176167176176176
    347746739
    5610
    
    예상 출력
    Case #1: 0
    Case #2: 25
    Case #3: 226
    Case #4: 1628
    Case #5: 49516
    Case #6: 15
    Case #7: 15
    Case #8: 15
    Case #9: 43764
    Case #10: 49750
    Case #11: 10
    Case #12: 51
    Case #13: -1
    Case #14: 1233
    Case #15: 22374
    
  2. 예제 2

    입력
    3
    1
    2
    3
    
    예상 출력
    Case #1: 0
    Case #2: 2
    Case #3: 3