感谢\(lfd\)ios
\((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计算系数git
很明显的二项式定理的应用
须要注意一下的是其实因为\(x 、 y\)都是有系数的,因此还要把他们的系数也算出来,次数与\(x、y\)的保持一致
Code:spa
#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; }
谢谢收看, 祝身体健康!code