「NOIP2011」计算系数 题解
「NOIP2011」计算系数
题意
给定一个多项式 \((ax + by)^k\),求多项式展开后\(x^n y^m\)项的系数。
解
二项式定理科普
完了,就是板子题。
显然这个多项式还要乘上一个 \(C^n_k\)
Code
#include <bits/stdc++.h>
using i64 = long long;
inline i64 read(){
	i64 x = 0, f = 1;char ch = getchar();
	while (ch < '0' || ch > '9') f = ch == '-' ? -1 : 1, ch = getchar();
	while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
	return x * f;
}
inline void print(i64 x){
	char P[105];i64 w=0;if(x==0){putchar('0');return;}
	if(x<0) putchar('-'),x=(~x) + 1;
	while(x) P[++w]=x%10+'0',x/=10;
	for(i64 i=w; i>=1; i--) putchar(P[i]);
}
constexpr int p = 10007;
i64 n, m;
inline i64 q_pow(i64 a, i64 b){
	i64 ans = 1;
	while (b) {
		if (b & 1) ans = (ans * a) % p;
		a = (a * a) % p;
		b >>= 1;
	}
	return ans;
}
inline i64 c(i64 n, i64 m) {
	i64 ans1 = 1, ans2 = 1;
	while (m) {
		ans1 = (ans1 * n) % p;
		ans2 = (ans2 * m) % p;
		n--, m--;
	} 
	i64 Ans = 1ll * ans1 * q_pow(ans2, p - 2) % p;
	return Ans;
}
inline i64 lucas(i64 n, i64 m) {
	return m == 0 ? 1 : (c(n % p, m % p) * lucas(n / p, m / p) % p);	
}
inline void solve() {
	int a = read(), b = read(), k = read();
	n = read(), m = read();
	print((lucas(k, n) * q_pow(a, n) % p * q_pow(b, m) % p)% p); putchar('\n');
}
int main() {
	solve();
	
	return 0;
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号