好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
原题来自:BZOJ 2982
LMZ 有 n 个不同的基友,他每天晚上要选 m 个进行 [河蟹],而且要求每天晚上的选择都不一样。那么 LMZ 能够持续多少个这样的夜晚呢?当然,LMZ 的一年有 10007 天,所以他想知道答案 mod10007 的值。
实际上就是求组合数 Cnmmod10007。
输入格式
第一行一个整数 t,表示有 t 组数据;
接下来 t 行,每行两个整数 n,m,含义如上。
输出格式
t 行,每行一个整数,表示 Cnmmod10007 的值。
样例
样例输入
4
5 1
5 2
7 3
4 2
样例输出
5
10
35
6
样例解释
- C51=5mod10007=5
- C52=10mod10007=10
- C73=35mod10007=35
- C42=6mod10007=6
数据范围
对于全部数据:
- 1≤t≤200
- 1≤m≤n≤2×108
时空限制
- 时间:1000 ms
- 内存:524288 KB
提示
模数 10007 是质数,可以使用 Lucas 定理 计算组合数模小质数,避免对大数直接计算。
Lucas 定理:
$$C_n^m \bmod p = C_{n \bmod p}^{m \bmod p} \times C_{\lfloor n/p \rfloor}^{\lfloor m/p \rfloor} \bmod p$$
其中 p=10007,递归求解即可。预处理 1 到 p−1 的阶乘与逆元,可 O(1) 计算 Cabmodp(当 a,b<p)。