Tổng và giai thừa

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Swift
Điểm: 1500 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: sumfact.inp Output: sumfact.out

Một ngày rảnh rỗi, Ami, Thánh Ngốc và zxa cùng ôn lại kỷ niệm xưa bằng cách giải lại đề thi tuyển sinh lớp 10 chuyên Lê Quý Đôn 2016-2017. Trong đó có bài toán đơn giản như sau: Cho một số nguyên dương \(n\). Hãy tính xem có bao nhiêu cách biểu diễn \(n\) thành tổng của một số số nguyên dương liên tiếp, đồng thời tổng đó phải chứa ít nhất \(2\) số hạng (không tính cách biểu diễn n = n).

Hai cách biểu diễn được xem là khác nhau nếu có \(1\) số nguyên dương nằm trong cách này nhưng không xuất hiện trong cách còn lại.

Trong Contest 11 lần này, các bạn hãy giải bài toán trên cho \(n! (= 1\times 2\times 3\times ...\times n)\) thay vì \(n\) như đề gốc. Vì đáp số có thể rất lớn, hãy in ra số dư của kết quả khi chia cho \(M\).

Input

  • Gồm 1 dòng duy nhất chứa 2 số nguyên dương \(n, m (1 \le n \le 10^6, 2 \le M \le 10^9 + 7)\).

Output

  • Một số nguyên dương là đáp số bài toán ứng với \(n!\).

Scoring

  • Subtask 1 \((30\%)\) số điểm: \(n \le 15\)
  • Subtask 2 \((30\%)\) số điểm: \(n \le 300\)
  • Subtask 3 \((40\%)\) số điểm: giới hạn gốc

Example

Test 1

Input
2 100
Output
0
Note

\(2! = 2\): không có cách biểu diễn nào

Test 2

Input
3 100
Output
1
Note

\(3! = 6 = 1 + 2 + 3\): 1 cách

Test 3

Input
5 3
Output
0
Note

\(5! = 1 + 2 + \dots + 15 = 22 + 23 + 24 + 25 + 26 = 39 + 40 + 41 \rightarrow 3\) cách, in ra \(3 \mod 3 = 0\)

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.