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.csdn.net/weixin_46028214/article/details/115920131