AcWing算法基础课笔记——求组合数4

news2024/11/24 9:48:48

求组合数Ⅳ

用来解决求 C a b C_a^b Cab的问题(没有模运算)

解决办法:分解质因数,实现高精度乘法。
C a b = a ! b ! ( a − b ) ! C_a^b = \frac{a!}{b!(a - b)!} Cab=b!(ab)!a!
其中 a ! a! a!可以用 p p p的倍数来表示:
a ! = ⌊ a p ⌋ + ⌊ a p 2 ⌋ + ⌊ a p 3 ⌋ + … a! = \left \lfloor \frac{a}{p} \right \rfloor + \left \lfloor \frac{a}{p^2} \right \rfloor +\left \lfloor \frac{a}{p^3} \right \rfloor +\dots a!=pa+p2a+p3a+

题目

在这里插入图片描述

代码

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

const int N = 5010;

int primes[N], cnt;
int sum[N];
bool st[N];

//计算2~n中有多少质数,存在primes[N]中 
void get_primes(int n) {
	for(int i = 2; i <= n; i ++) {
		if(!st[i]) primes[cnt ++ ] = i;
		for(int j = 0; primes[j] <= n / i; j ++ ) {
			st[primes[j] * i] = true;
			if(i % primes[j] == 0) break;
		}
	}
}

//计算n的阶乘中包含的p的倍数 
int get(int n, int p) {
	int res = 0;
	while(n) {
		res += n / p;
		n /= p;
	}
	return res;
}

//高精度乘法 
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;
	}
	
	while(t) {
		c.push_back(t % 10);
		t /= 10;
	} 
	
	return c;
}

int main() {
	int a, b;
	cin >> a >> b;
	
	//先初始化求2-a中的质数 
	get_primes(a);
	
	//对于每个质数,求它的次数 
	for(int i = 0; i < cnt; i ++ ) {
		int p = primes[i];
		sum[i] = get(a, p) - get(b, p) - get(a - b, p);
	}
	
	//将质数的次幂乘起来,求最终的结果 
	vector<int> res;
	res.push_back(1);
	
	for(int i = 0; i < cnt; i ++ ) {
		for(int j = 0; j < sum[i]; j ++) {
			res = mul(res, primes[i]);
		}
	}
	
	for(int i = res.size() - 1; i >= 0; i --) printf("%d", res[i]);
	puts("");
	
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶仿真:Carsim转向传动比设置

文章目录 一、转向传动比概念二、设置转向传动比1、C factor概念2、Steer Kinematics概念3、传动比计算公式 三、转向传动比验证 一、转向传动比概念 转向传动比&#xff08;Steering Ratio&#xff09;表示方向盘转动角度与车轮转动角度之间的关系。公式如下&#xff1a; 转向…

计算机网络 动态路由OSPF

一、理论知识 1.OSPF基本概念 ①OSPF是一种链路状态路由协议&#xff0c;使用Dijkstra算法计算最短路径。 ②OSPF使用区域&#xff08;Area&#xff09;来组织网络&#xff0c;区域0&#xff08;Area 0&#xff09;是主干区域。 ③路由器通过通告直连网络加入OSPF域。 ④反…

QT中制作带有界面的静态库

1、可参考以下文章 QT中制作带有界面的动态库 2、相比动态库&#xff0c;静态库就更简单了&#xff0c;&#xff0c;&#xff0c; 1&#xff09;创建静态库项目 2&#xff09;直接右键创建同名窗口类进行覆盖 3&#xff09;编译生成静态库 4&#xff09;使用

人工智能导论笔记

目录 ​编辑 绪论篇 有关知识表示和推理的零碎知识点 机器学习篇 K-近邻算法&#xff08;KNN&#xff09; 人工神经网络与深度学习篇 人工神经元模型 人工神经网络 BP神经网络 卷积神经网络 搜索策略 状态空间表示法 盲目搜索 启发式图搜索策略 绪论篇 3个学派&a…

实战篇:GY-906红外测温模块 + 万年历(定时器计数中断版本) -STM32篇

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布&#xff1a; https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

视频批量剪辑新境界:一键转码MP4至MP3并自动删除原文件,轻松优化存储空间与播放体验

随着数字媒体的飞速发展&#xff0c;视频文件已成为我们生活中不可或缺的一部分。然而&#xff0c;大量视频文件的累积不仅占据了宝贵的存储空间&#xff0c;而且在某些情况下&#xff0c;我们更希望提取视频中的音频内容。为了满足这一需求&#xff0c;我们推出了全新的视频批…

LLVM——安装多版本LLVM和Clang并切换使用(Ubuntu)

1、描述 本机&#xff08;Ubuntu22&#xff09;已经安装了LLVM-14&#xff0c;但是需要使用LLVM-12。安装LLVM-12和Clang-12并切换使用。 2、过程 安装LLVM-12和Clang-12。 sudo apt-get install llvm-12 sudo apt-get install clang-12 【注】运行 sudo apt-get install ll…

django学习入门系列之第三点《CSS基础样式介绍2》

文章目录 文字对齐方式外边距内边距往期回顾 文字对齐方式 水平对齐方式 text-align: center;垂直对齐方式 /* 注意&#xff0c;这个只能是一行来居中 */ line-height:/*长度*/ ;样例 <!DOCTYPE html> <html lang"en"> <head><meta charset…

【Oracle】实验一 安装和使用Oracle数据库

【实验目的】 掌握Oracle软件安装过程&#xff0c;选择安装组件掌握建立Oracle数据库&#xff0c;配置网络连接使用SQL*Plus&#xff0c;登录到实例和数据库掌握命令方式的关闭和启动实例及数据库 【实验内容】 安装Oracle19c&#xff0c;记录安装过程。切记&#xff1a;创建…

Jenkins定时构建自动化(二):Jenkins的定时构建

目录 ​编辑 一、 jenkins定时构建语法&#xff1a; 1. 语法规则&#xff1a; 2. 常见用法举例 3. 再次举例 接上一篇&#xff1a;Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置&#xff1a;Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置-CSDN博客 …

HTML静态网页成品作业(HTML+CSS)——故宫介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

【教学类-36-09】20240622钓鱼(通义万相)-A4各种大小的鱼

背景需求&#xff1a; 用通义万相获得大量的简笔画鱼的图片&#xff0c;制作成不同大小&#xff0c;幼儿用吸铁石钓鱼的纸片&#xff08;回形针&#xff09;&#xff0c;涂色、排序等 补一张通义万相的鱼图 素材准备 &#xff08;一&#xff09;优质的鱼图片 &#xff08;二&a…

(2024)豆瓣电影TOP250爬虫详细讲解和代码

&#xff08;2024&#xff09;豆瓣电影TOP250爬虫详细讲解和代码 爬虫目的 获取 https://movie.douban.com/top250 电影列表的所有电影的属性。并存储起来。说起来很简单就两步。 第一步爬取数据第二步存储 爬虫思路 总体流程图 由于是分页的&#xff0c;要先观察分页的规…

VS Code安装及环境配置(超详细)

VS Code简介 Visual Studio Code&#xff08;简称 VS Code &#xff09;是 Microsoft 于2015年4月发布的一款代码编辑器&#xff0c;以界面简洁、轻量著称。 它是一款免费开源的现代化轻量级代码编辑器&#xff0c;支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义…

投票多功能小程序(ThinkPHP+Uniapp+FastAdmin)

&#x1f389;你的决策小助手&#xff01; 支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码。​ 一、引言&#xff1a;为什么我们需要多功能投票小程序&#…

1. ELK日志分析

ELK日志分析 一、ELK作用、组件1、作用2、核心组件2.1 beat软件2.1 Logstash2.2 Elasticsearch2.3 Kibana 二、ELK部署、测试1、环境规划2、确保SELinux关闭、时间同步3、所有主机添加主机名解析4、三台ES主机安装jdk 1.155、调整系统资源限制6、部署es集群6.1 创建普通用户elk…

HMI 的 UI 风格,超凡脱俗

HMI 的 UI 风格&#xff0c;超凡脱俗

“Driver not loaded“问题解决方案

这两天又碰到了离谱的&#xff0c;愚蠢的&#xff0c;莫名其妙的&#xff0c;丧尽天良的错误。 之前已经解决过这个问题。这几天又碰上了&#xff0c;明明都已经把相应的dll放到了exe的同级目录&#xff0c;NND还是有问题&#xff01;&#xff01;&#xff01;卡了我一个晚上加…

【服务器】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网&#xff08;没有百度广告就是…

Android面试题(四大组件篇)

Q&#xff1a;说下Activity的四种启动模式&#xff1f;&#xff08;有时会出个实际问题来分析返回栈中Activity的情况&#xff09;https://blog.csdn.net/augfun/article/details/54897871 Q&#xff1a;谈谈singleTop和singleTask的区别以及应用场景 栈顶复用&#xff1a;解…