求组合数-预处理阶乘,模数为质数

计算系数

https://ac.nowcoder.com/acm/contest/1026/A

(ax+by)k(ax+by)^k的每一项咱们提取出来的 xnymx^ny^m 的系数应该是(kn)anbm\binom{k}{n}a^nb^m

组合数用阶乘预处理可得,复杂度为 O(k)O(k)。 指数用费马小定理快速幂求逆元,复杂度为 O(log(Mod2))O(\log(Mod-2))

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1000005,Mod=10007;
ll FACT[N];
ll power(ll a,ll b){
    ll r=1;
    while(b){
        if((b&1)) r=r*a%Mod;
        a=(ll)a*a%Mod;
        b>>=1;
    }
    return r;
}
ll verse(ll a){
    return power(a,Mod-2);
}
int main(){
    ll a,b,k,n,m;
    cin>>a>>b>>k>>n>>m;ll ans=1;
    FACT[0]=1;
    for(int i=1;i<=k;++i)
        FACT[i]=FACT[i-1]*i%Mod;
    ans*=FACT[k]*verse(FACT[n]);
    ans%=Mod;
    ans*=verse(FACT[k-n]);
    ans%=Mod;
    ans*=power(a,n);
    ans%=Mod;
    ans*=power(b,m);
    ans%=Mod;
    cout<<ans<<endl;
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务