给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7)的值。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一组 a 和 b。
输出格式
共 n 行,每行输出一个询问的解。
数据范围
1≤n≤10000,
1≤b≤a≤105
输入样例:
3
3 1
5 3
2 2
输出样例:
3
10
1
使用快速幂求解a!,用费马小定理求解后面的逆元
代码:
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10, mod = 1e9 + 7;
ll n, a, b;
ll fact[N], ifact[N];
ll qmi(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void init() {
fact[0] = 1;
ifact[0] = 1;
for (int i = 1; i < N; i ++ ) {
fact[i] = fact[i - 1] * i % mod;
ifact[i] = ifact[i - 1] * qmi(i, mod - 2) % mod;
}
}
int main() {
init();
cin >> n;
while (n -- ) {
cin >> a >> b;
cout << (fact[a] * ifact[b]) % mod * ifact[a - b] % mod << endl;
}
}