만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피보나치 반반수열

시간 제한2초메모리 제한1024 MB

요약
n이 최대 10^18일 때, 1, 2, 3, 5, ...로 이어지는 피보나치 수열 f에 대해 a[a[n]] = f[n]을 만족하는 사전순 최소 수열 a의 n번째 항을 구합니다. 10^18을 넘으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
수학, 재귀, 그리디
정답자
아직 제출이 없습니다

문제

1, 2로 시작하는 피보나치 수열 fnf_n은 다음과 같이 정의한다.

  • f1=1f_1=1
  • f2=2f_2=2
  • n≥3n\ge 3일 때, fn=fn−1+fn−2f_n=f_{n-1}+f_{n-2}

이 피보나치 수열의 반반수열 ana_n은 다음과 같이 정의한다.

  • ana_n은 모든 양의 정수 nn에 대해 aan=fna_{a_n}=f_n을 만족하는 모든 수열 중에서 사전 순으로 가장 작은 수열이다.

수열 ana_n이 bnb_n보다 사전 순으로 작다는 것은, 어떤 ii가 존재하여 ii보다 작은 모든 jj에 대해 aj=bja_j=b_j이고 ai<bia_i<b_i인 것을 뜻한다.

입력

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

다음 줄부터 TT개의 줄에 걸쳐 nn의 값이 한 줄에 하나씩 주어진다. (1≤n≤1018)(1\le n\le 10^{18})

출력

TT개의 줄에 걸쳐 각각의 nn에 대해 ana_n의 값을 출력한다. an>1018a_n>10^{18}이라면 -1을 대신 출력한다.

예제1

  1. 예제 1

    입력
    7
    1
    2
    3
    4
    5
    6
    10000000
    
    예상 출력
    1
    2
    3
    6
    13
    5
    -1