計算係數(多項式展開+快速冪)
阿新 • • 發佈:2018-12-09
計算係數
時間限制: 1 Sec 記憶體限制: 128 MB
題目描述
給定一個多項式(by+ax)k,請求出多項式展開後xn * ym 項的係數。
輸入
共一行,包含5 個整數,分別為 a ,b ,k ,n ,m,每兩個整數之間用一個空格隔開。0≤k≤1000, 0≤n,m≤k 且 n+m=k, 0≤a,b≤100,000
輸出
輸出共1 行,包含一個整數,表示所求的係數,這個係數可能很大,輸出對10007 取模後的結果。
樣例輸入
複製樣例資料
1 1 3 1 2
樣例輸出
3
餓,最近快速冪寫的賊多。
=,所以要求的即i=m,所以係數為,快速冪求一下就好了
/**/ #include <cstdio> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> #include <map> #include <set> #include <vector> #include <string> #include <stack> #include <queue> typedef long long LL; using namespace std; const int mod = 10007; int a, b, k, n, m; int pow_c(int x, int num){ int res = 1 % mod; x %= mod; while(num){ if(num & 1) res = (res * x) % mod; x = (x * x) % mod; num >>= 1; } return res; } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); scanf("%d %d %d %d %d", &a, &b, &k, &n, &m); int c[k + 1]; c[1] = 1; for (int i = 2; i <= k; i++) c[i] = c[i - 1] * i % mod; int ans = c[k] * pow_c(c[m] * c[k - m], mod - 2) % mod; printf("%d\n", ans * pow_c(b, k - n) % mod * pow_c(a, n) % mod); return 0; } /**/