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

74.Acwing基础课第888题-简单-求组合数Ⅳ

74.Acwing基础课第888题-简单-求组合数Ⅳ

题目描述

\(输入a,b,求 C^b_a的值\)

输入格式

\(共一行,包含两个整数 a 和 b\)

输出格式

\(共一行,输出 C^b_a的值\)

数据范围

\(1≤b≤a≤5000\)

输入样例:

5 3

输出样例:

10

代码:

// 包含基础输入输出、算法、向量容器头文件(vector用于存储高精度数)
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;// 常量定义:N=5010,支持计算C(a,b)中a≤5000的组合数
const int N = 5010;// 全局变量:
// primes[]:存储1~a范围内的所有质数
// cnt:质数的个数
// sum[]:存储每个质数在组合数中的指数(C(a,b) = ∏(p^sum[p]))
// st[]:筛法标记数组(true表示非质数)
int primes[N], cnt;
int sum[N];
bool st[N];// 线性筛(欧拉筛)函数:筛选出1~n范围内的所有质数,时间复杂度O(n)
// 优势:每个数仅被其最小质因子筛一次,效率高于普通筛法
void get_primes(int n)
{// 遍历2~n的所有数for (int i = 2; i <= n; i ++ ){// 若未被标记,说明是质数,加入primes数组if (!st[i]) primes[cnt ++ ] = i;// 用当前质数筛除合数for (int j = 0; primes[j] <= n / i; j ++ ){st[primes[j] * i] = true; // 标记primes[j]*i为非质数// 若i能被primes[j]整除,说明primes[j]是i的最小质因子,退出循环(避免重复筛)if (i % primes[j] == 0) break;}}
}// 计算n!中质因子p的指数(公式:n/p + n/p² + n/p³ + ... 直到p^k > n)
int get(int n, int p)
{int res = 0; // 存储指数总和while (n){res += n / p; // 累加n/p(p的倍数个数)n /= p;       // 计算更高次幂的倍数个数(p², p³...)}return res;
}// 高精度乘法函数:将高精度数a(逆序存储)与低精度数b相乘,返回结果
// 例如:a=[1,2](表示21),b=2 → 结果=[2,4](表示42)
vector<int> mul(vector<int> a, int b)
{vector<int> c; // 存储乘积结果(逆序)int t = 0;     // 存储进位// 遍历高精度数的每一位for (int i = 0; i < a.size(); i ++ ){t += a[i] * b;          // 当前位乘积 + 上一位的进位c.push_back(t % 10);    // 存储当前位的结果(个位)t /= 10;                // 更新进位(十位及以上)}// 处理剩余进位(如t=123,需依次存储3、2、1)while (t){c.push_back(t % 10);t /= 10;}return c;
}int main()
{int a, b; // a:总数;b:选取数(计算C(a,b))cin >> a >> b;// 步骤1:筛选出1~a范围内的所有质数get_primes(a);// 步骤2:计算每个质数在C(a,b)中的指数// 组合数公式:C(a,b) = a!/(b!*(a-b)!) → 质因子p的指数 = get(a,p) - get(b,p) - get(a-b,p)for (int i = 0; i < cnt; i ++ ){int p = primes[i]; // 当前质数sum[i] = get(a, p) - get(a - b, p) - get(b, p);}// 步骤3:高精度乘法计算最终结果(初始为1)vector<int> res;res.push_back(1); // 初始值1(逆序存储:[1]表示1)// 遍历每个质数,按指数乘到结果中for (int i = 0; i < cnt; i ++ )for (int j = 0; j < sum[i]; j ++ )res = mul(res, primes[i]);// 步骤4:输出结果(逆序存储,需从后往前遍历)for (int i = res.size() - 1; i >= 0; i -- ) printf("%d", res[i]);puts(""); // 换行return 0;
}
http://www.jsqmd.com/news/613863/

相关文章:

  • 2026年兰州设备搬迁指南:为何“甘肃蚂蚁搬家”成为政企首选? - 深度智识库
  • 用户画像构建的7个关键步骤(从数据收集到标签建模)
  • 湖北鑫巨达工贸有限公司:高要区多玛地弹簧 多玛电动地弹簧出售公司 - LYL仔仔
  • 2026年甘肃门禁系统公司优选 覆盖兰州及各地市工程适配需求 - 深度智识库
  • PostgreSQL 技术日报 (4月9日)|JSON 搜索架构解锁,PG 迁移时机有讲究
  • Llama-3.2V-11B-cot作品集:10个真实场景下图文推理输出效果高清对比展示
  • 2026年4月福建气动衬氟阀/衬氟管道/衬氟管件/衬氟弯头/衬氟补偿器厂家哪家好 - 2026年企业推荐榜
  • OpenClaw备份恢复方案:千问3.5-35B-A3B-FP8任务配置的迁移技巧
  • 探索NWaves:C#中的高效信号处理与音频分析实战
  • 002、Python开发环境搭建:从官网下载到安装完成
  • 2026年雅思阅读网课怎么选?高性价比线上课程与小班一对一深度指南 - 品牌2025
  • Vue + Iframe 实战:打造企业级流程配置中心揪
  • 微型创业利器:OpenClaw+Qwen3.5-9B实现单人电商运营
  • 2026年有成绩报告的雅思机考软件推荐:5款好用软件深度测评 - 品牌2026
  • 无PFAS阻燃PC材料厂家聚赛龙方案
  • C++去重函数unique超详解|有序数组去重必学
  • 2026年聚山梨酯厂家创新服务排行榜 - 速递信息
  • 3D打印螺纹设计革命:Fusion 360专用优化配置文件深度解析
  • 博客标题:智契通项目开发周记(第一周):架构设计与基础环境搭建
  • 基于Qwen3-ForcedAligner-0.6B的小说音频版自动生成系统
  • 网络原理TCP/IP
  • 向量相似度查询结果不一致?深度拆解EF Core 10 QueryTranslation中的L2/Cosine距离计算偏差根源(含IL反编译验证)
  • Phi-3-mini-4k-instruct-gguf应用落地:HR招聘JD智能优化与岗位匹配建议生成
  • 文旅推荐官标杆|海西敦德旅游:珂探长引领小众深度旅行 赋能青海文旅高质量发展 - 深度智识库
  • 【限时技术内参】EF Core团队内部测试报告流出:向量搜索启用后DbContext并发吞吐量下降41%的根因与热修复补丁
  • DataCap实战指南:从多源数据整合到智能可视化的全流程解析
  • 近日作业1
  • AI模型部署总超时?.NET 11新特性——Predictive JIT Warmup + Model Caching策略(仅Windows Server 2022+可用)
  • 基于WPF与LibVLCSharp打造无边框媒体播放器的实践指南
  • RAGAS 了解吗?它的评估指标有哪些?评估流程是怎样的?评估数据如何获取和构造?