#A0101. 求组合数

求组合数

题目描述

从 nn 个不同元素中,任取 m(m≤n)m(m \le n) 个元素并成一组,叫做从 nn 个不同元素中取出 mm 个元素的一个组合;从 nn 个不同元素中取出 m(m≤n)m(m \le n) 个元素的所有组合的个数,叫做从 nn 个不同元素中取出 mm 个元素的组合数,计做 CnmC_n^m .

组合数计算方法如下:

$$C_n^m=\frac{A_n^m}{A_m^m}=\frac{n!}{(n-m)!\cdot m!}$$

(其中 AnmA_n^m 是从 nn 个不同元素中,任取 m(m≤n)m(m \le n) 个元素构成的排列数。)

组合数具有很多很多性质:

  • 1.互补性质: Cnm=Cnn−mC_n^m=C_n^{n-m}

  • 2.递推性质: Cnm=Cn−1m−1+Cn−1mC_n^m=C_{n-1}^{m-1}+C_{n-1}^{m}

给定 nn 和 mm ,求 CnmC_n^m 取 109+710^9+7 的余数。

输入格式

两个整数 nn mm.

输出格式

一个整数,表示 CnmC_n^m 取 109+710^9+7 的余数.

10 5
252

数据规模与约定

subtask1subtask1 : 1≤m≤n≤101 \le m\le n \le 10 , 1010 分 (直接算)

subtask2subtask2 : 1≤m≤n≤1031 \le m\le n \le 10^3 , 2020 分 (递推,杨辉三角)

subtask3subtask3 : 1≤m≤n≤1041 \le m\le n \le 10^4 , 2020 分 (递推,空间优化)

subtask4subtask4 : 1≤m≤n≤2×1051 \le m\le n \le 2 \times 10^5 , 5050 分 (逆元)