#A0101. 求组合数

求组合数

题目描述

nn 个不同元素中,任取 m(mn)m(m \le n) 个元素并成一组,叫做从 nn 个不同元素中取出 mm 个元素的一个组合;从 nn 个不同元素中取出 m(mn)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(mn)m(m \le n) 个元素构成的排列数。)

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

  • 1.互补性质Cnm=CnnmC_n^m=C_n^{n-m}

  • 2.递推性质: Cnm=Cn1m1+Cn1mC_n^m=C_{n-1}^{m-1}+C_{n-1}^{m}

给定 nnmm ,求 CnmC_n^m109+710^9+7 的余数。

输入格式

两个整数 nn mm.

输出格式

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

10 5

数据规模与约定

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

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

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

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