求组合数(递推法、乘法逆元、卢卡斯定理、分解质因数)

文章目录


常规的解法就不多加赘述了,如(分子/分母,边乘边除),本文讲述以下方法:
递推法
了解杨辉三角、二项式、组合数之间的联系
时间复杂度 O ( n 2 ) O(n^2) O(n2)
数据范围10^4
乘法逆元
C n m = n ! m ! ( n − m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!} Cnm=m!(nm)!n!
数据较大,运用乘法逆元+快速幂
阶乘 O ( n ) , 快速幂 O ( l o g ( n ) ),总 O ( l o g ( n ) ) 阶乘O(n),快速幂O(log (n)),总O(log (n)) 阶乘On,快速幂Olog(n)),总Olog(n)
数据范围10^6
卢卡斯定理
C n m = C n p m p ⋅ C n % p m % p % p C_{n}^{m}=C_\frac{n}{p}^\frac{m}{p}\cdot C_{{n\%p}}^{m\%p} \%p Cnm=CpnpmCn%pm%p%p
用于n,m比较大,p比较小,分解+乘法逆元求组合数法。
时间复杂度: O ( n ⋅ l o g 2 n ) O(n\cdot log_2n) O(nlog2n)
使用范围(大概): n , m < = 10^18, p < = 10^6,

递推法 10^4

C n m = C n − 1 m + C n − 1 m − 1 C_{n}^{m} =C_{n-1}^{m} +C_{n-1}^{m-1} Cnm=Cn1m+Cn1m1

(从n个里面选m个等同于,选最后一个+不选最后一个)

杨辉三角

  • 杨辉三角第n行是 ( a + b ) n (a+b)^n (a+b)n展开的系数

  • 杨辉三角的递推和组合数相同(左上+上)

  • 高中数学二项式的展开 ( a + b ) n = ∑ i = 0 n C n i a i b n − i (a+b)^n=\sum_{i=0}^{n}{C_{n}^{i}a^ib^{n-i}} (a+b)n=i=0nCniaibni


综上,更能体会组合数和杨辉三角直接的千丝万缕

代码

时间复杂度( n 2 n^2 n2),n,m<=10^4

#include<bits/stdc++.h>
using namespace std;
int main()
{int a[100][100],n=100;a[0][0]=1;for(int i=1;i<=n;i++)for(int j=0;j<=i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}cout<<a[5][2]<<'\n';
}

乘法逆元 10^6

关于乘法逆元可以看 2024ccpc全国邀请赛(郑州) 补题(乘法逆元)

  • 不要想着边乘边除就不需要乘法逆元了。这样看似能够整除,但在运算过程中遇到取模,此后就不能保证精确

a mod b (b为质数),由费马小定理得,a 的逆元是 a b − 2 a^{b-2} ab2

  • 为方便计算用公式

C n m = n ! m ! ( n − m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!} Cnm=m!(nm)!n!

代码

阶乘 O ( n ) , 快速幂 O ( l o g ( n ) ),总 O ( l o g ( n ) ) 阶乘O(n),快速幂O(log (n)),总O(log (n)) 阶乘On,快速幂Olog(n)),总Olog(n) n,m<=10^6

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e8,mod=1e9+7;
int a[N];// 阶乘%mod,注意N,根据题目修改,不然可能时间超限
int qpow(int a,int b,int c)//快速幂
{int ans=1;while(b){if(b&1) ans= ans*a%c;a=a*a%c,b/=2;}return ans;
}
int C(int n,int m)//排列  从n个里面选m个
{if(m>n) return 0;return a[n]*qpow(a[n-m]*a[m]%mod,mod-2,mod)%mod;//!!!!//pow(a,b,c)  a^b过程中%c
}
signed main()
{a[0]=1;for(int i=1;i<=N;i++)a[i]=i*a[i-1]%mod;cout<<C(10,3);
}

卢卡斯定理 1 0 18 m o d 1 0 6 10^{18}mod 10^6 1018mod106

用于n,m比较大,p比较小

C n m = C n p m p ⋅ C n % p m % p % p C_{n}^{m}=C_\frac{n}{p}^\frac{m}{p}\cdot C_{{n\%p}}^{m\%p} \%p Cnm=CpnpmCn%pm%p%p
可以逐层分解

代码

使用范围(大概): n , m < = 10^18, p < = 10^6,

时间复杂度: O ( n ⋅ l o g 2 n ) O(n\cdot log_2n) O(nlog2n)

//qpow 快速幂        return ans;
//C    组合数(逆元) return a[n]*qpow(a[n-m]*a[m]%mod,mod-2,mod)%mod;
//a[N] 阶乘
int lucas(int n,int m)//在原来基础上加上lucas函数,递归求解
{if(m==0)return 1;return lucas(n/mod,m/mod)*C(n%mod,m%mod)%mod;
}
signed main()
{a[0]=1;for(int i=1;i<=N;i++)a[i]=i*a[i-1]%mod;cout<<lucas(10,3);//直接调用lucas
}

分解质因数

待补……

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

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

相关文章

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果

WPF进阶 | WPF 动画特效揭秘&#xff1a;实现炫酷的界面交互效果 前言一、WPF 动画基础概念1.1 什么是 WPF 动画1.2 动画的基本类型1.3 动画的核心元素 二、线性动画详解2.1 DoubleAnimation 的使用2.2 ColorAnimation 实现颜色渐变 三、关键帧动画深入3.1 DoubleAnimationUsin…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.27 NumPy+Pandas:高性能数据处理的黄金组合

2.27 NumPyPandas&#xff1a;高性能数据处理的黄金组合 目录 #mermaid-svg-x3ndEE4hrhO6WR6H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x3ndEE4hrhO6WR6H .error-icon{fill:#552222;}#mermaid-svg-x3ndEE4hr…

swagger使用指引

1.swagger介绍 在前后端分离开发中通常由后端程序员设计接口&#xff0c;完成后需要编写接口文档&#xff0c;最后将文档交给前端工程师&#xff0c;前端工程师参考文档进行开发。 可以通过一些工具快速生成接口文档 &#xff0c;本项目通过Swagger生成接口在线文档 。 什么…

DeepSeek API文档解读(对话模块)

对话&#xff08;Chat&#xff09; 对话补全 报文message对象数组 System message name 一个在线聊天系统&#xff0c;其中涉及多个用户和一个系统管理员。在这个系统中&#xff0c;每个用户都可以发送消息&#xff0c;并且系统管理员可以监控和回复这些消息。为了区分不同…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.19 线性代数核武器:BLAS/LAPACK深度集成

2.19 线性代数核武器&#xff1a;BLAS/LAPACK深度集成 目录 #mermaid-svg-yVixkwXWUEZuu02L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yVixkwXWUEZuu02L .error-icon{fill:#552222;}#mermaid-svg-yVixkwXWUEZ…

Linux——文件与磁盘

1. 磁盘结构 磁盘在我们的计算机中有着重要的地位&#xff0c;当文件没有被打开时其数据就存储在磁盘上&#xff0c;要了解磁盘的工作原理先要了解磁盘的结构。 1.1 磁盘的物理结构 以传统的存储设备机械硬盘为例&#xff0c;它通过磁性盘片和磁头来读写数据。磁盘内部有多个旋…

【Envi遥感图像处理】010:归一化植被指数NDVI计算方法

文章目录 一、NDVI简介二、NDVI计算方法1. NDVI工具2. 波段运算三、注意事项1. 计算结果为一片黑2. 计算结果超出范围一、NDVI简介 归一化植被指数,是反映农作物长势和营养信息的重要参数之一,应用于遥感影像。NDVI是通过植被在近红外波段(NIR)和红光波段(R)的反射率差异…

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理

UE虚幻引擎No Google Play Store Key&#xff1a;No OBB found报错如何处理&#xff1f; 问题描述&#xff1a; UE成功打包APK并安装过后&#xff0c;启动应用时提示&#xff1a; No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …

C++并发编程指南04

文章目录 共享数据的问题3.1.1 条件竞争双链表的例子条件竞争示例恶性条件竞争的特点 3.1.2 避免恶性条件竞争1. 使用互斥量保护共享数据结构2. 无锁编程3. 软件事务内存&#xff08;STM&#xff09; 总结互斥量与共享数据保护3.2.1 互斥量使用互斥量保护共享数据示例代码&…

【Redis】主从模式,哨兵,集群

主从复制 单点问题&#xff1a; 在分布式系统中&#xff0c;如果某个服务器程序&#xff0c;只有一个节点&#xff08;也就是一个物理服务器&#xff09;来部署这个服务器程序的话&#xff0c;那么可能会出现以下问题&#xff1a; 1.可用性问题&#xff1a;如果这个机器挂了…

Vue.js 如何选择合适的组件库

Vue.js 如何选择合适的组件库 大家在开发 Vue.js 项目的时候&#xff0c;都会面临一个问题&#xff1a;我该选择哪个组件库&#xff1f; 市面上有很多优秀的 Vue 组件库&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它们各有特点。选择合适的组件库&#xf…

寒假(一)

请使用消息队列实现2个终端之间互相聊天 终端一 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h&g…

java项目验证码登录

1.依赖 导入hutool工具包用于创建验证码 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency> 2.测试 生成一个验证码图片&#xff08;生成的图片浏览器可…

4 前端前置技术(中):node.js环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言

BUU14 [极客大挑战 2019]PHP1

用dirsearch扫描文件&#xff0c;扫了一万年什么也没扫出来 从网上看的wp&#xff0c;他们扫出来www.zip 这里直接用上了&#xff0c;以后有空再扫一遍 下载www.zip 在index.php中 说明要输入select 打开class.php <?php include flag.php;error_reporting(0);class…

7-9 乘法口诀数列

本题要求你从任意给定的两个 1 位数字 a1​ 和 a2​ 开始&#xff0c;用乘法口诀生成一个数列 {an​}&#xff0c;规则为从 a1​ 开始顺次进行&#xff0c;每次将当前数字与后面一个数字相乘&#xff0c;将结果贴在数列末尾。如果结果不是 1 位数&#xff0c;则其每一位都应成为…

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪 2025/2/2 21:25 声卡&#xff1a;笔记本电脑的摄像头自带的【USB接口的】麦克风。没有外接3.5mm接口的耳机。 缘起&#xff1a;在安装Ubuntu18.04/20.04系统的笔记本电脑中直接使用Guvcview录像的时候底噪很大&#xff01; …

使用React和Material-UI构建TODO应用的前端UI

使用React和Material-UI构建TODO应用的前端UI 引言环境准备代码解析1. 导入必要的模块2. 创建React组件3. 定义函数3.1 获取TODO列表3.2 创建TODO项3.3 更新TODO项3.4 删除TODO项3.5 处理编辑点击事件3.6 关闭编辑对话框3.7 保存编辑内容 4. 使用Effect钩子5. 渲染组件 功能实现…

蓝桥杯思维训练营(三)

文章目录 题目详解680.验证回文串 II30.魔塔游戏徒步旅行中的补给问题观光景点组合得分问题 题目详解 680.验证回文串 II 680.验证回文串 II 思路分析&#xff1a;这个题目的关键就是&#xff0c;按照正常来判断对应位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…

重生之我在异世界学编程之C语言:深入指针篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文&#xff08;1&#xff09;内置数…