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

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

레오나르도 수

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

요약
레오나르도 수의 k제곱합을 계산해 1000000000으로 나눈 나머지를 9자리로 출력합니다.
난이도

어려움10점 중 8점

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

문제

유명한 피보나치 수는 피보나치라고도 불리는 피사의 레오나르도가 남긴 유일한 발견이 아니다. L0=L1=1L_0 = L_1 = 1이고 i≥1i \ge 1에 대해 Li+1=Li+Li−1+1L_{i+1} = L_i + L_{i-1} + 1로 정의하자. 이 수열 (Li)(L_i)을 레오나르도 수라고 부른다.

두 정수 nn과 kk가 주어질 때, 다음 식의 값을 구하라.

L0k+L1k+L2k+⋯+LnkL_0^k + L_1^k + L_2^k + \cdots + L_n^k

이 값은 매우 커질 수 있으므로, 십진법으로 나타냈을 때의 마지막 99자리만 출력한다.

표준 입력에서 nn과 kk를 읽어 위 합을 계산하고, 결과의 마지막 99자리를 표준 출력에 출력하는 프로그램을 작성하라.

입력

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

  • 1≤k≤131 \le k \le 13
  • 1≤n≤264−11 \le n \le 2^{64} - 1 (nn은 64비트 부호 없는 정수 범위에 들어간다)

출력

L0k+L1k+⋯+LnkL_0^k + L_1^k + \cdots + L_n^k의 마지막 99자리, 즉 이 값을 10910^9으로 나눈 나머지를 출력한다. 값이 99자리보다 짧으면 앞을 00으로 채워 항상 정확히 99자리를 출력한다.

예제4

  1. 예제 1

    입력
    3 2
    
    예상 출력
    000000036
    
  2. 예제 2

    입력
    1 1
    
    예상 출력
    000000002
    
  3. 예제 3

    입력
    5 1
    
    예상 출력
    000000034
    
  4. 예제 4

    입력
    2 5
    
    예상 출력
    000000245