【快速幂求乘法逆元】洛谷P1313 计算系数

链接

https://www.luogu.org/problemnew/show/P1313


大意

(ax+by)k ( a x + b y ) k 的第 xn×yn x n × y n 的系数是多少


思路

首先根据组合公式,我们可以知道系数的因数一定包括 cnK c K n ,因为这题有质数的模数,所以我们可以愉快的跑快速幂求逆元,就算出组合数啦

正好 ax a x by b y 都可以通过快速幂求出,然后就愉快的 A A 掉啦


代码

#include
#define ymw 10007
using namespace std;int fac[10001],inv[10001],a,b,n,m,k,ans;
int ksm(int x,int y)
{
    x%=ymw;//记得要模,不然就老老实实开long long
    int ans=1;for(;y;x*=x,x%=ymw,y>>=1) if(y&1) ans*=x,ans%=ymw;//快速幂
    return ans%ymw;
}
int C(int n,int m){return (fac[n]*inv[m]%ymw*inv[n-m]%ymw)%ymw;}//算组合数
signed main()
{
    scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    fac[0]=1;
    for(register int i=1;i<=n+m;i++) fac[i]=(fac[~-i]*i)%ymw,inv[i]=ksm(fac[i],ymw-2);//预处理
    ans=(ksm(a,n)%ymw*ksm(b,m)%ymw*C(k,n)%ymw)%ymw;//计算
    printf("%d",ans);//输出
}

你可能感兴趣的:(数论)