만드는 중입니다

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

피보나치 수열처럼 보이지만...

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

요약
F_1=1, F_2=2인 피보나치 수 F_i에 대해 F_i 곱하기 i^k를 i=1부터 n까지 더한 값을 구한다. n은 10^17까지 커질 수 있다.
난이도

어려움10점 중 8점

유형
수학, 동적 계획법, 행렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

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

F1=1,F2=2,Fi=Fi−1+Fi−2(i>2)F_1 = 1, \quad F_2 = 2, \quad F_i = F_{i-1} + F_{i-2} \quad (i > 2)

수열 Ai(k)A_i(k)는 다음과 같이 정의된다.

Ai(k)=Fi×ik(i≥1)A_i(k) = F_i \times i^k \quad (i \ge 1)

nn과 kk가 주어졌을 때 A1(k)+A2(k)+⋯+An(k)A_1(k) + A_2(k) + \cdots + A_n(k)를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 nn과 kk가 공백으로 구분되어 주어진다. (1≤n≤10171 \le n \le 10^{17}, 1≤k≤401 \le k \le 40)

출력

첫째 줄에 A1(k)+A2(k)+⋯+An(k)A_1(k) + A_2(k) + \cdots + A_n(k)를 109+710^9 + 7로 나눈 나머지를 출력한다.

예제4

  1. 예제 1

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

    입력
    4 1
    
    예상 출력
    34
    
  3. 예제 3

    입력
    5 2
    
    예상 출력
    316
    
  4. 예제 4

    입력
    7 4
    
    예상 출력
    73825