组合数(2) 排列组合—— 数据范围超大(10w)
这里预处理要用到快速幂求逆元的操作。。。忘记了就复习。
#include#include using namespace std; typedef long long LL; const int N = 1000010, mod = 1e9 + 7; int fact[N], infact[N]; int n; LL qmi(int a, int b, int p) { LL ans = 1; while(b) { if(b & 1) ans = (LL) ans * a % p; b >>= 1; a = (LL) a * a % p; } return ans; } int main() { cin >> n; fact[0] = infact[0] = 1; for(int i = 1; i < N; i++) { fact[i] = (LL)fact[i-1] * i % mod; infact[i] = (LL)infact[i-1] * qmi(i, mod - 2, mod) % mod; } while(n--) { int a, b; cin >> a >> b; cout << (LL)fact[a] * infact[b] % mod * infact[a-b] % mod << endl; } return 0; }