当前位置: 首页 > news >正文

题解:AcWing 887 求组合数 III

【题目来源】

AcWing:887. 求组合数 III - AcWing题库

【题目描述】

给定 \(n\) 组询问,每组询问给定三个整数 \(a,b,p\),其中 \(p\) 是质数,请你输出 \(C_a^b\ mod\ p\) 的值。

【输入】

第一行包含整数 \(n\)

接下来 \(n\) 行,每行包含一组 \(a,b,p\)

【输出】

\(n\) 行,每行输出一个询问的解。

【输入样例】

3
5 3 7
3 1 5
6 4 13

【输出样例】

3
3
2

【算法标签】

《AcWing 887 求组合数III》 #组合数学# #组合计数# #Lucas定理# #逆元# #快速幂# #费马小定理#

【代码详解】

#include <bits/stdc++.h>
using namespace std;#define int long long  // 使用long long类型防止溢出
int p;  // 模数,必须是质数// 快速幂算法,计算 a^b mod p
int qmi(int a, int b)
{int mul = 1;  // 结果初始化为1while (b)  // 当指数b不为0时继续{if (b & 1)  // 如果b的最低位是1{mul = mul * a % p;  // 将当前a乘入结果}a = a * a % p;  // a自乘b >>= 1;        // b右移一位}return mul;  // 返回a^b mod p
}// 直接计算组合数 C(a, b) mod p,要求 a,b < p
int C(int a, int b)
{if (b > a) return 0;  // 如果b>a,组合数为0if (b > a - b) b = a - b;  // 使用对称性 C(a,b)=C(a,a-b),减少计算量int res = 1;  // 结果初始化为1// 计算 C(a, b) = a! / (b! * (a-b)!) = a*(a-1)*...*(a-b+1) / b!for (int i = 1, j = a; i <= b; i++, j--){// 分子:j = a, a-1, ..., a-b+1res = res * j % p;// 除以分母的第i项i// 费马小定理:i^{-1} ≡ i^{p-2} (mod p)res = res * qmi(i, p - 2) % p;}return res;  // 返回 C(a, b) mod p
}// 卢卡斯定理递归计算组合数
int lucas(int a, int b)
{if (b == 0) return 1;  // 基本情况:C(a, 0) = 1// 如果a,b都小于p,直接计算if (a < p && b < p){return C(a, b);}// 卢卡斯定理:C(a, b) ≡ C(a mod p, b mod p) * C(a/p, b/p) (mod p)return C(a % p, b % p) * lucas(a / p, b / p) % p;
}signed main()  // 因为使用了#define int long long,所以用signed main
{int n;  // 查询次数cin >> n;while (n--)  // 处理每个查询{int a, b;  // 输入C(a, b)cin >> a >> b >> p;  // 输入a, b和模数p// 使用卢卡斯定理计算组合数cout << lucas(a, b) << endl;}return 0;
}

【运行结果】

3
5 3 7 
3
3 1 5
3
6 4 13
2
http://www.jsqmd.com/news/409321/

相关文章:

  • Java 方法引用
  • Java基础(下)之Stream
  • Java基础(下)之方法引用
  • 题解:AcWing 886 求组合数 II
  • 题解:AcWing 885 求组合数 I
  • 功能炸裂!推荐一款低代码数据大屏可视化系统,内置丰富模版,支持拖拽构建炫酷大屏
  • 视频孪生终结者:镜像视界空间神经系统与空间控制权重构——融合统一空间坐标反演体系 × 三维实时定位引擎 × 多路径概率展开模型 × 前向围堵优化算法的跨行业空间压制与主动调度控制平台
  • 大数据领域数据产品的搜索功能优化
  • AI原生应用开发:如何利用Copilot实现代码质量与效率双提升
  • HNOI 2026 退役记
  • 从零开始:使用 Claude Code 打造字母消除游戏
  • 价值投资中的AI智能体可持续发展能力分析系统
  • AI模型部署自动化的核心:镜像+编排+监控的三位一体设计
  • 微信小程序 uniapp+vue老年人心血管健康
  • 基于径向基神经网络(RBF)预制构件需求量预测GUI软件
  • Sass/SCSS函数深度解析
  • 1亿条URL去重,怎么搞才不崩?生产级方案全解析(从入门到大厂实战)
  • 强化学习·价值学习-MC,TD和Q-learning算法
  • day95(2.24)——leetcode面试经典150
  • 强化学习·导论
  • 一些喜欢的 ACG 曲
  • 灰色关联度模型正负性问题的研究及其改进附Matlab代码
  • 小程序商城开发怎么选?5 家优质平台实测推荐,避开低价陷阱不踩雷 - 企业数字化改造和转型
  • 基于动态神经网络NARX/GRNN/BP/RBF的IBM收盘价预测-时间序列预测附Matlab代码
  • 性价比封神!微信小程序开发平台排名,零隐形消费平台优先选 - 企业数字化改造和转型
  • 基于经验模态分解和粒子群优化支持向量机(EMD+PSO_SVM)大坝变形预测附Matlab代码
  • Metasploit新手入门|从安装到首次漏洞探测
  • 高效科研工具:9大论文目录生成软件,自动更新功能详解
  • 中小商家首选|十大小程序开发公司排名,年费低至700元 - 企业数字化改造和转型
  • 学术研究必备:盘点9款智能目录生成工具,一键自动更新