【数学】二项式定理
二项式定理
\[(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}\)。
对于每一项都是这样。
证毕。
\(\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;
}