【题解】 P1313 计算系数
\(Description:\)
给出多项式\((by+ax)^k\),求出展开后\(x^n*y^m\)的系数(保证\(n+m=k\))
\(Sample\) \(Input\):
1 1 3 1 2
\(Sample\) \(Output\):
3
一眼二项式定理,但是不会。。。
学了一下好像会用一丢丢了。
具体公式:
\((x+y)^n=\sum_{k=0}^{n}C(n,k)*x^k*y^{n-k}=\sum_{k=0}^{n}C(n,k)*x^{n-k}*y^k\)
发现对于这题要求的系数其实就是:
\(C(n,k)*a^n*b^m\)
那就很完美的解决了,这其实也没必要发题解,我吃的空。。。。。。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,n,k,m;
const int p=10007;
const int MAXK=1000;
int f[MAXK+5],inv[MAXK+5];
inline int power(int a,int b,int p){
int ret=1;
for(;b;a=(a*a)%p,b>>=1)if(b&1)ret=(ret*a)%p;
return ret;
}
inline int C(int n,int m){
if(n<m)return 1;
if(n==m)return 1;
return f[n]*((inv[m]*inv[n-m])%p)%p;
}
signed main(){
scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m);
f[0]=1;
for(int i=1;i<=k;++i)f[i]=(f[i-1]*i)%p;
inv[0]=1;
inv[k]=power(f[k],p-2,p);
for(int i=k-1;i>=1;--i)inv[i]=(inv[i+1]*(i+1))%p;
printf("%lld\n",C(k,n)*power(a,n,p)%p*power(b,m,p)%p);
return 0;
}