#1610. Dãy Số 1-M (SEQ1M)

Bộ nhớ: 512 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho hai số nguyên dương N M . Chúng ta cần xây dựng các dãy số nguyên dương A = (a_1, a_2, \dots, a_k) với độ dài k bất kỳ, sao cho dãy số thỏa mãn hai điều kiện sau:

  1. Tổng các phần tử trong dãy bằng N (tức là \sum_{i=1}^{k} a_i = N ).
  2. Mỗi phần tử trong dãy chỉ được nhận giá trị là 1 hoặc M (tức là a_i \in \{1, M\} với mọi i ).

Hãy đếm xem có bao nhiêu dãy số A khác nhau thỏa mãn yêu cầu trên. Hai dãy số được coi là khác nhau nếu độ dài của chúng khác nhau, hoặc tồn tại ít nhất một vị trí index i mà tại đó giá trị phần tử khác nhau ( a_i \neq b_i ).

Kết quả cần được in ra theo modulo 1000000007 ( 10^9+7 ).

Dữ liệu:

  • Dữ liệu vào chứa một dòng duy nhất gồm 2 số nguyên N M ( 1 \le N \le 10^{18} , 2 \le M \le 100 ).

Kết quả:

  • In ra một số nguyên là tổng số lượng dãy số thỏa mãn điều kiện đề bài. In câu trả lời theo modulo 1000000007 ( 10^9+7 ).

Ví dụ:

Dữ liệu:

4 2

Kết quả:

5

Dữ liệu:

3 2

Kết quả:

3

Giải thích: Trong ví dụ đầu tiên với N=4 M=2 , các dãy số thỏa mãn tổng bằng 4 và các phần tử chỉ thuộc tập \{1, 2\} là:

  • (1, 1, 1, 1) : Tổng là 1+1+1+1 = 4
  • (2, 1, 1) : Tổng là 2+1+1 = 4
  • (1, 2, 1) : Tổng là 1+2+1 = 4
  • (1, 1, 2) : Tổng là 1+1+2 = 4
  • (2, 2) : Tổng là 2+2 = 4

Tổng cộng có 5 dãy số khác nhau.

Giới hạn:

  • Subtask #1 (40% số điểm): N \le 10^5 .

  • Subtask #2 (20% số điểm): N \le 10^{18}, M = 2 .

  • Subtask #3 (40% số điểm): Không có ràng buộc bổ sung.