AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 887. 求组合数 III    原题链接    简单

作者: 作者的头像   嘤嘤嘤0 ,  2019-10-14 18:03:36 ,  所有人可见 ,  阅读 5725


73


24

有两个点,第一个是$lucas$定理的公式,另外一个是求$C_{a}^{b}$的函数

  1. $Lucas$定理:$C_{a}^{b} \equiv C_{a \% p}^{b \% p} * C_{\frac{a}{p}}^{\frac{b}{p}}(mod p)$
  2. 为什么可以这样求解$C_{a}^{b}$:
    $C_{a}^{b} = \frac{a!}{(a - b)! * b!} = \frac{a * (a - 1) * (a - 2) * … * (a - b + 1) * (a - b) * … * 1}{(a - b) * (a - b - 1) * … * 1 * b!} = \frac{a * (a - 1) * (a - 2) * … (a - b + 1)}{b!}$
    因此就可以递推的每次乘$a$然后除以$b$, 因为从$a$到$a - b + 1$, 所以就是乘$b$次
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline int sd(int &n) { return scanf("%d", &n); }
inline int sld(ll &n) { return scanf("%lld", &n); }
const int inf = 0x3f3f3f3f;
const int maxn = 1e6 + 6;

ll poww(ll a, ll b, ll p){
    ll res = 1 % p;
    while(b){
        if(b & 1) res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}

ll C(ll a, ll b, ll p){
    ll res = 1;
    for(int i = 1, j = a;i <= b;++i, --j){
        res = res * j % p;
        res = res * poww(i, p - 2, p) % p;
    }
    return res % p;
}

ll lucas(ll a, ll b, ll p){
    if(a < p && b < p) return C(a, b, p);
    return C(a % p, b % p, p) * lucas(a / p, b / p, p) % p;
}

int main(){
    int n; sd(n);
    while(--n >= 0){
        ll a, b; sld(a), sld(b);
        ll p; sld(p);
        cout << lucas(a, b, p) << endl;
    }

    return 0;
}

46 评论


用户头像
Liang_9   2022-06-11 20:19      6    踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的

用户头像
Liang_9   2022-08-24 15:52      6    踩      回复

撤回,现在又不会了

用户头像
五星好市民1   2022-09-03 13:03    回复了 Liang_9 的评论         踩      回复

hhh

用户头像
Liang_9   2023-03-12 14:44      3    踩      回复

永远年轻,永远忘记怎么做

用户头像
嘤嘤嘤0   2023-03-12 17:18    回复了 Liang_9 的评论      1    踩      回复

哈哈哈,太真实了~(泪目

用户头像
lrs_0   2023-03-18 10:16    回复了 Liang_9 的评论         踩      回复

怎么做啊,现在会了吗?我还是不懂c函数在干嘛qwq


用户头像
Scat   2024-04-08 17:21         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
fuhz0709   2024-02-20 18:54         踩      回复

▄█▀█●


用户头像
cai_xing   2023-08-14 19:28         踩      回复

棒棒哒


用户头像
snowys   2023-08-04 12:10         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
NiteNite   2023-03-21 16:20         踩      回复

谢谢大佬,也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
水墨   2023-01-24 18:22         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
RwChen   2023-01-02 20:46         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
何苦呢   2022-10-26 19:06         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
有机物   2022-08-04 21:56         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
songszh   2022-07-29 14:02         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
柠檬味的猪已黑化   2022-06-08 23:37         踩      回复

orz

用户头像
柠檬味的猪已黑化   2022-06-08 23:38         踩      回复

太棒了吧这也


用户头像
Moyou   2022-06-06 22:55         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
815741912   2022-03-31 01:51         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
yrz_1   2022-03-21 23:32         踩      回复

有点点秀秀哦


用户头像
凌蕸   2022-02-13 20:10         踩      回复

谢谢大佬,我终于看懂了中间那个循环里两个res是啥意思了


用户头像
ncust202102   2022-02-11 10:42         踩      回复

牛牛牛
orz


用户头像
iwoeix   2022-02-11 09:27         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
ljx___1   2021-12-15 21:24         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


用户头像
arthur15   2021-11-06 06:33         踩      回复

谢谢大佬,也也也也也也也也也也也也也也也让我明白了C函数是怎么求的


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息