题目大意:
给定一个多项式 ( a x + b y ) k (ax + by)^k (ax+by)k,请求出多项式展开后 x n y m x^ny^m xnym 项的系数%10007的值。
解题思路:
由二项式展开式得
(
a
+
b
)
n
(a+b)^n
(a+b)n展开式得第i+1项
(
i
=
0..
n
)
a
n
−
i
b
i
\ (i = 0 .. n)\ a^{n-i}b^i
(i=0..n) an−ibi前面的系数为
C
n
i
C_{n}^{i}
Cni
∵
x
n
y
m
x^ny^m
xnym前面的系数不算a和b时是
(
C
k
m
)
(C_{k}^{m})
(Ckm)
∴
x
n
y
m
x^ny^m
xnym的系数为:
a
n
b
m
∗
C
k
m
a^nb^m\ *\ C_{k}^{m}
anbm ∗ Ckm
然后我们可以用快速幂或者直接搞
a
n
a^n
an和
b
m
b^m
bm, 毕竟
K
≤
1000
K\ ≤\ 1000
K ≤ 1000
然后再杨辉三角递推求
C
k
m
C_{k}^{m}
Ckm
Accepted code:
#include<cstdio>
#include<iostream>
#define YMW 10007
using namespace std;
int a, b, k, n, m, y[1010][1010];
int power(int x, int b) {//快速幂
ll ans = 1; x %= YMW;
while (b) {
if (b & 1) (ans *= x) %= YMW;
(x *= x) %= YMW;
b /= 2;
}
return ans;
}
int main() {
scanf("%d %d %d %d %d", &a, &b, &k, &n, &m);
y[1][1] = 1;
for (int i = 2; i <= k+5; ++i)
for (int j = 1; j <= i; ++j)
y[i][j] = (y[i-1][j] + y[i-1][j-1]) % YMW;//杨辉三角
printf("%lld\n", power(a, n)*power(b, m)%YMW*y[k+1][m+1]%YMW);
}