二项式展开

前言

  • 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}\)

  • 参考网络上部分资料,鸣谢,侵删
posted @ 2026-07-04 16:11  msjing  阅读(17)  评论(0)    收藏  举报