886. 求组合数 II
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了886. 求组合数 II相关的知识,希望对你有一定的参考价值。
https://www.acwing.com/problem/content/888/
C
a
b
=
a
!
(
a
−
b
)
!
b
!
C_a^b =\\frac{a!}{(a-b)!\\ b!}
Cab=(a−b)! b!a!
除法取模我们要求逆元将其转换为乘法。本题的mod=1e9+7 是一个质数,故可以用费马小定理来求逆元。
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long int LL;
const int N=1e5+10,mod=1e9+7;
LL f[N],inf[N];
int n;
LL qmi(LL a,LL b,LL mod)
{
LL res=1;
while(b)
{
if(b&1) res=res*a%mod;
a=a*a%mod;
b=b>>1;
}
return res;
}
void init()
{
f[0]=inf[0]=1;
for(int i=1;i<=100000;i++)
{
f[i]=f[i-1]*i%mod;
inf[i]=inf[i-1]*qmi(i,mod-2,mod)%mod;
}
}
int main(void)
{
cin>>n;
init();
while(n--)
{
int a,b; cin>>a>>b;
cout<<f[a]*inf[a-b]%mod*inf[b]%mod<<endl;
}
return 0;
}
以上是关于886. 求组合数 II的主要内容,如果未能解决你的问题,请参考以下文章