jQuery火箭图标返回顶部代码 - 站长素材
jQuery火箭图标返回顶部代码 - 站长素材

关于二项式定理

关于二项式定理:

感谢\(lfd\)

定理内容:

\((a+b)^n=C_n^0*a^n*b^0+C_n^1*a^{n-1}*b^1+......C_n^n*a^0*b^n\)
也就是\((a+b)^n=\Sigma _{k=0}^nC_n^ka^kb^{n-k}\)
通项公式:\(T_{r+1}=C_n^r*a^{n-r}*b^r\) \((r\in [0,n])\)
解释一下各字母的含义:
\(T[r+1]:\)表示第\(r+1\)项是什么
\(C_n^r:\)他只是个单纯的组合数而已
\(a^{n-r}:\) 因为\(a\)是未知数,所以这个\(n-r\)就代表第\(r+1\)项时的\(a\)的次数是\(n-r\)
\(b^r\)同上
例题:
洛谷p1313计算系数

很明显的二项式定理的应用
需要注意一下的是其实由于\(x 、 y\)都是有系数的,所以还要把他们的系数也算出来,次数与\(x、y\)的保持一致
Code:

#include <cstdio>
#include <iostream>
#define int long long
using namespace std;
const int mo = 10007;
int c[1005][1005], ans, a, b, k, n, m;
int read() {
	int s = 0, w = 1;
	char ch = getchar();
	while(!isdigit(ch)) {if(ch == '-') w = -1; ch = getchar();}
	while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = getchar();}
	return s * w;
}
int power(int x, int y) {
	int sum = 1;
	while(y) {
		if(y & 1) sum = (sum * x) % mo;
		x = (x * x) % mo;
		y >>= 1;
	}
	return sum;
}
int find(int n, int m) {
	if(!m) return c[n][m] = 1;
	if(m == 1) return c[n][m] = n;
	if(c[n][m]) return c[n][m];
	if(n - m < m) m = n - m;
	return c[n][m] = (find(n - 1, m) + find(n - 1, m - 1)) % mo;	
}
signed main() {
	a = read(), b = read(), k = read(), n = read(), m = read();
	c[1][0] = c[1][1] = ans = 1;
	a %= mo, b %= mo;
	ans *= (power(a, n) * power(b, m)) % mo;
	if(n > m) n = m;
	ans = (ans * find(k, n) % mo) % mo;
	printf("%lld\n", ans);
	return 0;
}

谢谢收看, 祝身体健康!

posted @ 2019-11-01 14:40  lzpclxf  阅读(432)  评论(0编辑  收藏  举报