题目描述

给定一个多项式\((by+ax)^k\),请求出多项式展开后\(x^n*y^m\)项的系数。

输入输出格式

输入格式:

共一行,包含5个整数,分别为\(a,b,k,n,m\),每两个整数之间用一个空格隔开。

输出格式:

共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。


思路:
由二项式定理得,结果为\(C_k^m*a^n*b^m \ mod \ 10007\)

因为10007是质数,所以我们可以用费马小定理求出阶乘逆元再直接求出\(C_k^m\)\(a,b\)则线性乘过去即可。


Code:

#include <cstdio>
#define ll long long
const ll mod=10007;
ll inv[2],a,b,k,n,m,ans=1,fac=1;
ll quick_pow(ll d,ll t)
{
    ll f=1;
    while(t)
    {
        if(t&1)
            f=f*d%mod;
        d=d*d%mod;
        t>>=1;
    }
    return f;
}
void init()
{
    scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m);
    inv[0]=inv[1]=1;
    for(int i=1;i<=n;i++)
    {
        inv[0]=inv[0]*i%mod;
        ans=ans*a%mod;
    }
    for(int i=1;i<=m;i++)
    {
        inv[1]=inv[1]*i%mod;
        ans=ans*b%mod;
    }
    for(int i=1;i<=k;i++)
        fac=fac*i%mod;
    inv[0]=quick_pow(inv[0],mod-2);
    inv[1]=quick_pow(inv[1],mod-2);
}
void work()
{
    ans=ans*fac%mod*inv[0]*inv[1]%mod;
    printf("%lld\n",ans);
}
int main()
{
    init();
    work();
    return 0;
}


2018.7.4

相关文章:

  • 2021-08-17
  • 2021-06-20
  • 2021-07-25
  • 2021-08-21
猜你喜欢
  • 2021-11-04
  • 2021-07-20
  • 2021-11-03
  • 2021-12-14
  • 2021-10-16
  • 2021-12-17
  • 2022-02-24
相关资源
相似解决方案