886. 求组合数 II
题目链接https://www.acwing.com/problem/content/888/
题目:
思路:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const int mod=1e9+7;//mod为质数
int a,b,n;
int fact[100010],infact[100010];
int imt(int x,int y,int k){
int res=1%k;
while(y){
if(y&1) res=(LL)res*x%k;
x=(LL)x*x%k;
y>>=1;
}
return res;
}
void solve(){
fact[0]=1,infact[0]=1;
for(int i=1;i<=100000;i++){
fact[i]=(LL)fact[i-1]*i%mod;//不加LL会溢出
infact[i]=(LL)infact[i-1]*imt(i,mod-2,mod)%mod;
}
}
int main(){
solve();
cin>>n;
while(n--){
cin>>a>>b;
int res=(LL)fact[a]*infact[b]%mod*infact[a-b]%mod;
printf("%d\n",res);
}
return 0;
}
求组合数的方法总结https://blog.youkuaiyun.com/weixin_46028214/article/details/115920131