记录编号 313539 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]计算系数 最终得分 100
用户昵称 GravatarBillAlen 是否通过 通过
代码语言 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;
}