给定一个多项式(ax+by)k,请求出多项式展开后x^n * y^m项的系数。
输入格式
共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。
数据范围
0≤n,m≤k≤1000,
n+m=k,
0≤a,b≤106
输入样例:
1 1 3 1 2
输出样例:
3
一道很简单的二项式定理,高中学过的应该都能做出来,
二项式定理:(ax+by)^k 求 x^n * y^m的系数直接用公式就可。(不知道的百度)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int p=10007;
ll a,b,k,n,m;
ll qmi(ll a,ll b)//快速幂
{
ll res=1;
while(b)
{
if(b&1) res=(res*a)%p;
b>>=1;
a=(a*a)%p;
}
return res;
}
ll inv(ll a)//求逆元,为求组合数准备
{
return qmi(a,p-2);
}
ll cntC(ll n,ll r)//求组合数
{
ll fz=1,fm=1;
for(int i=n;i>=n-r+1;i--) fz=fz*i%p;
for(int i=2;i<=r;i++) fm=fm*i%p;
return fz*inv(fm)%p;
}
int main()
{
cin>>a>>b>>k>>n>>m;
cout<<(qmi(a,n)*qmi(b,m))%p*cntC(k,m)%p<<endl;//公式运用
return 0;
}