【数学】二项式定理

二项式定理

\[(a+b)^n=\sum\limits_{k=0}^{n}\dbinom{n}{k}a^k b^{n-k} \]

证明:

\((a+b)^n=\begin{matrix}\underbrace{(a+b)(a+b)\cdots(a+b)}\\n个(a+b)\end{matrix}\)

如果现在要得到 \(a^k b^{n-k}\),那么只需要在这 \(n\)\((a+b)\) 中选 \(k\) 个取 \(a\),剩下 \((n-k)\) 个自动就选 \(b\) 了。

所以这一项就有 \(\dbinom{n}{k}\) 个,值就是 \(\dbinom{n}{k}a^k b^{n-k}\)

对于每一项都是这样。

证毕。

P1313 [NOIP2011 提高组] 计算系数

\(\text{Code}\)

//18 = 9 + 9 = 18.
#include <iostream>
#include <cstdio>
#define Debug(x) cout << #x << "=" << x << endl
using namespace std;

const int MAXN = 1005;
const int MOD = 10007;

int qpow(int a, int b)
{
	int base = a, ans = 1;
	while (b)
	{
		if (b & 1)
		{
			ans = ans * base % MOD;
		}
		base = base * base % MOD;
		b >>= 1;
	}
	return ans;
}

int inv(int a)
{
	return qpow(a, MOD - 2);
}

int fac[MAXN], inv_fac[MAXN];

void init(int n)
{
	fac[0] = 1;
	for (int i = 1; i <= n; i++)
	{
		fac[i] = fac[i - 1] * i % MOD;
	}
	inv_fac[n] = inv(fac[n]);
	for (int i = n - 1; i >= 1; i--)
	{
		inv_fac[i] = inv_fac[i + 1] * (i + 1) % MOD;
	}
}

int C(int n, int m)
{
	return fac[n] * inv_fac[n - m] % MOD * inv_fac[m] % MOD;
}

int main()
{
	int a, b, k, n, m;
	scanf("%d%d%d%d%d", &a, &b, &k, &n, &m);
	a %= MOD, b %= MOD;
	init(k);
	printf("%d\n", C(k, n) * qpow(a, n) % MOD * qpow(b, m) % MOD);
	return 0;
}
posted @ 2021-11-18 14:07  mango09  阅读(156)  评论(0编辑  收藏  举报
-->