[Luogu] 计算系数

https://www.luogu.org/problemnew/show/P1313#sub

Answer = a ^ n * b ^ m * C(k, min(n,  m))

这里用费马小定理求逆元来计算组合数

#include <bits/stdc++.h>

using namespace std;

#define Mod 10007

#define LL long long
#define gc getchar()

LL a, b, k, n, m, p;

inline LL read() {
    LL x = 0; char c = gc;
    while(c < '0' || c > '9') c = gc;
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = gc;
    return x;
}

LL Answer;

LL ksm(LL num, LL z) {
    LL ret = 1;
    while(z) {
        if(z & 1) ret = ret * num % Mod;
        num = num * num % Mod;
        z >>= 1;
    }
    return ret;
}

LL Calc() {
    LL down = 1, num = 1, k_p, k_, p_;
    for(int i = 1; i <= k; i ++) {
        num = num * i % Mod;
        if(i == p) p_ = num;
        if(i == k - p) k_p = num;
        if(i == k) k_ = num;
    }
    LL imp = p_ * k_p % Mod;
    down = ksm(imp, Mod - 2);
    return k_ * down % Mod;
}

int main() {
    a = read(); b = read(); k = read(); n = read(); m = read();
    a %= Mod; b %= Mod;
    p = min(n, m);
    a = ksm(a, n);
    b = ksm(b, m);
    LL C_k_p = Calc();
    LL Ans = (C_k_p * (a * b % Mod) % Mod);
    printf("%lld", Ans);
    return 0;
}
/*
1 1 5 2 3
 a ,b ,k ,n ,m
*/

 

转载于:https://www.cnblogs.com/shandongs1/p/8657147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值