记录编号 |
313539 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2011]计算系数 |
最终得分 |
100 |
用户昵称 |
BillAlen |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-09-30 17:38:28 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include <fstream>
#include <cstdlib>
#include <cmath>
#define MOD 10007
#define MAXN 1000
typedef unsigned long long int value_t;
using namespace std;
value_t f[MAXN + 1];
void initialize(){
f[0] = 1;
for(value_t i = 1;i <= MAXN; ++i){
f[i] = (value_t)f[i-1] * i % MOD;
}
}
value_t fast(value_t a, value_t n){
if(n == 0) return 1;
if(n % 2) return (value_t)a * fast(a, n-1) % MOD;
value_t tmp = fast(a,n/2);
return (value_t)tmp * tmp % MOD;
}
value_t comb(value_t n, value_t m){
if(n == m || m == 0)return 1;
return ((value_t)(f[n] * fast(f[m], MOD - 2) % MOD)) * fast(f[n-m], MOD - 2) % MOD;
}
value_t modpow(value_t a, value_t b, value_t mod){
value_t res = 1;
while(b){
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int main(){
fstream in("factor.in", ios::in), out("factor.out", ios::out);
value_t a, b, k, n, m, com, f1, f2, res;
in >> a >> b >> k >> n >> m;
initialize();
com = comb(k, m);
f1 = modpow(a, n, MOD);
f2 = modpow(b, m, MOD);
res = (((com * f1) % MOD) * f2) % MOD;
out << res << endl;
return 0;
}