就算系数:求二项式展开的系数:线性推逆元+求组合数

#include<bits/stdc++.h>
using namespace std;
#define mod 10007
int inv[10008];
int f[3005],invf[3005];//阶乘,阶乘逆元 
void init(){ 
    inv[0]=inv[1]=1;//线性逆元打表 
    for(int i=2;i<=10006;i++){
        inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    }
    f[0]=f[1]=1,invf[0]=invf[1]=1;//阶乘以及阶乘打表 
    for(int i=2;i<=1005;i++){
        f[i]=f[i-1]*i%mod;
        invf[i]=invf[i-1]*inv[i]%mod;
    } 
}
int a,b,k,n,m;
int Pow(int a,int n){
    int res=1;
    while(n){
        if(n%2)res=(long long)res*a%mod;
        n>>=1;a=(long long)a*a%mod;
    }
    return res;
}
int C(int k,int n){
    return (f[k]*invf[n]%mod)*invf[k-n]%mod;
}
int main(){
    init();
    cin>>a>>b>>k>>n>>m;
    int t1=Pow(a,n);
    int t2=Pow(b,m);
    int t3=C(k,n); 
    cout<<(t1*t2%mod)*t3%mod;
} 

猜你喜欢

转载自www.cnblogs.com/zsben991126/p/10614120.html