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

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

파이보나치

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

요약
n과 k가 주어질 때 P_n의 k제곱을 정수 A, B를 써서 A φ^k + B 형태로 나타내고 1,000,000,007로 나눈 나머지를 출력합니다.
난이도

어려움10점 중 9점

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

문제

피보나치 수는 다음 점화식으로 정의되는 수열이다.

Fn={0n=01n=1Fn−1+Fn−2n>1F_n = \begin{cases} 0 & n = 0 \\ 1 & n = 1 \\ F_{n-1} + F_{n-2} & n > 1 \end{cases}

피보나치 수는 x2=x+1x^2 = x + 1의 두 근 중 하나인 황금비 φ=5+12\varphi = \frac{\sqrt{5}+1}{2}와 관계가 깊다. 일반항을 Fn=φn−(1−φ)n5F_n = \frac{\varphi^n - (1 - \varphi)^n}{\sqrt{5}}로 쓸 수 있다는 점이 그런 예다. 이제 φ\varphi로 파이보나치 수를 다음 점화식으로 정의한다.

Pn={1n=0φn=1Pn−1+Pn−2n>1P_n = \begin{cases} 1 & n = 0 \\ \varphi & n = 1 \\ P_{n-1} + P_{n-2} & n > 1 \end{cases}

F−1=1F_{-1} = 1로 두면 n≥0n \ge 0에서 Pn=Fnφ+Fn−1P_n = F_n \varphi + F_{n-1}이 성립한다. 여기서 묻는 것은 (Pn)k(P_n)^k를 두 정수 AA, BB로 Aφk+BA \varphi^k + B 꼴로 나타낼 수 있는지다. 나타낼 수 있으면 AA와 BB를 출력하고, 불가능하면 -1을 출력하라.

입력

첫째 줄에 두 정수 nn과 kk가 공백으로 구분되어 주어진다.

0≤n≤10120 \le n \le 10^{12}, 1≤k≤10121 \le k \le 10^{12}이다.

출력

첫째 줄에 (Pn)k=Aφk+B(P_n)^k = A \varphi^k + B를 만족하는 두 정수 AA, BB를 각각 1,000,000,007로 나눈 나머지를 공백으로 구분해 출력한다. 그런 두 정수가 없으면 -1을 출력한다.

힌트

n=3n = 3, k=2k = 2인 경우 (P3)2=(2φ+1)2=4φ2+4φ+1=8φ2−3(P_3)^2 = (2\varphi + 1)^2 = 4\varphi^2 + 4\varphi + 1 = 8\varphi^2 - 3이다. −3-3을 1,000,000,007로 나눈 나머지가 1,000,000,004이다.

예제5

  1. 예제 1

    입력
    5 1
    
    예상 출력
    5 3
    
  2. 예제 2

    입력
    3 2
    
    예상 출력
    8 1000000004
    
  3. 예제 3

    입력
    0 1
    
    예상 출력
    0 1
    
  4. 예제 4

    입력
    1 1
    
    예상 출력
    1 0
    
  5. 예제 5

    입력
    2 3
    
    예상 출력
    4 1