前言
- msjing刷题刷到多项式展开的题了并进行了大学习
介绍
- 二项式展开应用的场景为展开形如 \((a+b)^n\) 的柿子需要组合数学的一点点基础
二项式定理
$(a+b)^n = C_n^0 \times a^n + C_n^1 \times a^{n-1} \times b + C_n^2 \times a^{n-2} \times b^2 + ... + C_n^m \times a^{n-m} \times b^m + ... + C_n^n \times b^n$
- 其中\((n \in \mathbb{N^+})\),\(C_n^m\) 为组合数
二项式定理的扩展
- 形如 \((a \times x + b \times y)^n\) 的柿子,其第m+1项为: \(a^{n-m} \times b^m \times C_n^m \times x^{n-m} \times y^m\)
习题
solve
- 直接利用扩展,要求的系数为 \(a^n \times b^m \times C_k^n\)
点击查看代码
#include<bits/stdc++.h>
using namespace std;
constexpr int p=10007;
int read() {int x=0,f=1;char ch=getchar();while (ch<'0' || ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0' && ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
int a,b,k,n,m;
long long f[10010],g[10010];
long long ksm(long long x,long long y,long long mo)
{
long long cnt=1;
while(y)
{
if (y&1) cnt=(cnt*x)%mo;
x=(x*x)%mo;
y>>=1;
}
return cnt;
}
long long NY(long long a,long long p) {return ksm(a,p-2,p);}
void getfg(long long n)
{
f[0]=g[0]=1;
for (long long i=1;i<=n;i++) (f[i]=i*f[i-1])%=p,g[i]=NY(f[i],p);
}
long long getC(long long x,long long y) {return ((f[x]*g[x-y])%p*g[y])%p;}
long long getA(long long x,int y) {return f[x]*g[x-y]%p;}
int main()
{
getfg(1145);
a=read()%p,b=read()%p,k=read(),n=read(),m=read();
printf("%lld\n",ksm(a,n,p)*ksm(b,m,p)%p*getC(k,n)%p);
return 0;
}
\(\mathscr{END}\)