求C(n, m) % mod
其实归结到底就是一个求逆元的问题
当mod为素数时, x的逆元inv(x)= pow(x, mod-2)
#include <bits/stdc++.h>
using namespace std;
long long fact[200200];
long long inv[200200];
const int mod = 1e9 + 7;
long long qpow(long long x, long long n)
{
long long ans = 1;
while (n)
{
if (n & 1)
ans = ans * x % mod;
x = x * x % mod;
n >>= 1;
}
return ans;
}
void init()
{
fact[0] = 1;
for (int i = 1; i < 200005; i++)
fact[i] = fact[i - 1] * i % mod;
for (int i = 0; i < 200005; i++)
inv[i] = qpow(fact[i], mod - 2);
}
long long C(int n, int m)
{
return fact[n] * inv[n - m] % mod * inv[m] % mod;
}
int main()
{
init();
int n, m;
while(cin >> n >> m) {
cout << C(n, m) << endl;
}
}