아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

피보나치 수의 최대공약수

시간 제한1초메모리 제한256 MB

요약
N번째와 M번째 피보나치 수의 최대공약수를 1000000007로 나눈 나머지를 구합니다.
난이도

보통10점 중 5점

유형
정수론, 수학, 분할 정복
정답자
아직 제출이 없습니다

문제

피보나치 수열은 F0=0F_0 = 0, F1=1F_1 = 1이고 n≥2n \ge 2일 때 Fn=Fn−1+Fn−2F_n = F_{n-1} + F_{n-2}로 정의한다. 앞부분을 늘어놓으면 0, 1, 1, 2, 3, 5, 8, 13, 21로 이어진다.

점화식을 풀면 일반항은 다음과 같다.

Fn=15{(1+52)n−(1−52)n}F_n = \frac{1}{\sqrt{5}} \left\{ \left( \frac{1 + \sqrt{5}}{2} \right)^n - \left( \frac{1 - \sqrt{5}}{2} \right)^n \right\}

피보나치 수열은 성질이 많다. 예를 들어 다음 두 식이 성립한다.

∑i=1nFi=Fn+2−1,Fn∣Fkn(k=0,1,2,… )\sum_{i=1}^{n} F_i = F_{n+2} - 1, \qquad F_n \mid F_{kn} \quad (k = 0, 1, 2, \dots)

이 문제에서는 두 피보나치 수의 최대공약수를 구한다. 두 정수 NN, MM이 주어지면 gcd⁡(FN,FM)\gcd(F_N, F_M)을 계산한다. 값이 매우 크므로 109+710^9 + 7로 나눈 나머지를 출력한다. 나머지는 최대공약수를 구한 뒤에 취한다.

입력

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

다음 TT개의 줄에 각각 두 정수 NN, MM이 공백 하나로 구분되어 주어진다. (0<N,M≤1090 < N, M \le 10^9)

출력

각 테스트 케이스마다 gcd⁡(FN,FM)\gcd(F_N, F_M)을 109+710^9 + 7로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    7 10
    6 12
    
    예상 출력
    1
    8