题解 | 【模板】组合数
【模板】组合数
https://www.nowcoder.com/practice/53f82db091b2452bae5fef4437ffd0bb
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int P=1e9+7,N=5e5+10;
int power_num[N],jicheng_num[N];
int power(int a,int b,int p){
int ans=1;
a=a%P;
while(b>0){
if(b&1==1){
ans=ans*a%p;
}
a=a*a%p;
b=b>>1;
}
return ans;
}
void pre(){
jicheng_num[0]=1;
power_num[0]=1;
for(int i=1;i<=N;i++){
jicheng_num[i]=i*jicheng_num[i-1]%P;
}
power_num[N]=power(jicheng_num[N],P-2,P);
for(int i=N-1;i>=1;i--){
power_num[i]=(power_num[i+1]*(i+1))%P;
}
return;
}
int T,n,m;
void solve(){
int m_jicheng=jicheng_num[m];
int n_power=power_num[n];
int mn_power=power_num[m-n];
int n_mn_power=n_power*mn_power%P;
int c_nm=m_jicheng*n_mn_power%P;
cout<<c_nm<<endl;
return;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
pre();
cin>>T;
while(T--){
cin>>n>>m;
if(n==0&&m==0){
cout<<1<<endl;
continue;
}
solve();
}
return 0;
}

查看14道真题和解析