组合数计算的几种方法

方法一、公式法(此方法适合n和m都很小时使用)

公式:C(n,m)=C(n-1,m)+C(n-1,m-1)
我们在进行计算时可以采用动态规划的方法
代码描述:

 static long C(int n,int m) {long[] res=new long[m+1];Arrays.fill(res, 1);for(int i=0;i<=n;i++) {for(int j=Math.min(i, m);j>=0;j--) {if(j==0 || i==j) {res[j]=1;continue;}res[j]=res[j]+res[j-1];}}return res[m];}

方法二、利用乘法逆元(此方法适合对组合数求模时候使用)

对于乘法逆元不了解的需要自行百度,我们在此之说目的,引入乘法逆元是为了使得(a/b)%p转化为(a*inv(b))%p,即将除法求模转换为乘法求模,对于逆元的求解本人比较喜欢用费马小定理,其要求是gcd(b,p)==1 && p为质数,在这种情况下inv(b)=pow(b,p-2,p)。
代码描述:

 //组合数快速计算 static long C(int n,int m) {if(m<0 || n<m) return -1;  //不存在if(m>n-m) m=n-m;          //转换为小的一部分long up=1,lo=1;for(int i=0;i<m;i++) {up=(up*(n-i))%p;lo=(lo*(i+1))%p;}return (up*inv((int)lo,p))%p;}static int inv(int a,int p) {return quickPow(a,p-2,p);//另一种求逆元的方法//return (int)(long)(p-p/a)*inv(p%a,p)%p;}static int quickPow(int a,int b,int mod) {long x=a % mod;long res=1;while(b!=0) {if((b&1)==1) res=(res*x)%mod;x=(x*x)%mod;b>>=1;}return (int)res;}

组合数计算的几种方法相关推荐

  1. DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测

    DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...

  2. lisp 河道水面线计算_天然河道水面线计算的几种方法解剖.pdf

    天然河道水面线计算的几种方法探讨 赵文丽 710003 710003 陕西天元水利电力勘察设计有限公司 陕西 西安 771100000033 摘要:介绍了明渠恒定均匀流法.天然河道水面线系统. HEC ...

  3. QT时间差计算的两种方法代码

    QT时间差计算的两种方法 提供两种方法,直接贴出代码供参考,主要用到函数secsTo,toTIme_t(): #include <qdatetime.h>#include <wind ...

  4. 【简单总结】句子相似度计算的几种方法

    [简单总结]句子相似度计算的几种方法 1.句子相似度介绍: 句子相似度–指的是两个句子之间相似的程度.在NLP中有很大的用处,譬如对话系统,文本分类.信息检索.语义分析等,它可以为我们提供检索信息更快 ...

  5. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...

    单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...

  6. nn.Dataparallel pytorch 平行计算的两种方法

    1. nn.Dataparallel 多GPU加速训练 原理: 模型分别复制到每个卡中,然后把输入切片,分别放入每个卡中计算,然后再用第一块卡进行汇总求loss,反向传播更新参数. 第一块卡占用的内存 ...

  7. 帧率(FPS)计算的几种方法总结

    帧率(FPS, frame per second)计算是游戏编程中常见的一个话题,因为表现在画面刷新与视觉感官上,所以相对而言,帧率非常影响用户体验.这也是很多大型3D游戏所要提升的重要点,意味着你要 ...

  8. html闰年计算方法,闰年计算的两种方法

    说起闰年,估计一些朋友会很糊涂.好像隔个一两年就有闰年,结果闰来闰去,闰得头都快大了.到底什么是闰年?闰年该怎么计算呢? 实际上,闰年是公历的一个计算方式,也就是常说的阳历,或者叫西历也可以.在我国的 ...

  9. 基尼系数计算的两种方法:python实现 简单高效

    使用两种方法,通过python计算基尼系数. 在sql中如何计算基尼系数,可以查看我的另一篇文章.两篇文章取数相同,可以结合去看. 文章中方法1的代码来自于:(加入了一些注释,方便理解).为精确计算. ...

最新文章

  1. java 事件驱动模式_事件驱动
  2. 单片机片外RAM,串行的
  3. 使用ioctl向linux内核传递参数的方法实例
  4. MySQL 为什么表的数据删除一般,表文件大小不变?
  5. netcore 学习
  6. 小波去噪MATLAB代码
  7. 精通Spring Boot—— 第二十一篇:Spring Social OAuth 登录简介
  8. 使用Minikube部署本地Kubernetes集群(二十九)
  9. 服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记
  10. shell脚本之从1加到100之和的思路
  11. 大学英语计算机开学考试试题,2018年全国大学英语四级考试阅读理解试题:学习计算机...
  12. 笔记本电脑如何保养_笔记本电脑过热 五招教你轻松解决
  13. SQL Fundamentals || Single-Row Functions || 数字函数number functions
  14. java 生成中文字符乱码,java汉字乱码的原因与解决方法
  15. npm ERR! network request to https://registry.npmjs.org/axios failed, reason: Client network socket d
  16. Gartner 魔力象限
  17. 参加华为HCIP的培训班吗?
  18. Android 应用之安全开发
  19. 记一次我的Google电话面试经历
  20. 一分钟解决连接git/github失败问题!亲测可行!

热门文章

  1. suricata之linux编译
  2. 度小满牵手南京银行打造”AI鑫”计划:银行零售业掀起变革运动
  3. 如何比较两个文件是否完全一样,Windows、MacOS、Linux(使用自带命令比较)certutil,摘要,digest
  4. SAS ARMA模型拟合预测
  5. Ubuntu——挂载8T硬盘
  6. 将RecyclerView变为可以左右上下滑动的Excel时间表格
  7. Ubuntu常用C语言IDE,ubuntu下两个容易掌握的c/c++ IDE 环境介绍
  8. 树莓派-无屏幕安装官方系统及配置
  9. aris终端桌面_Aris-终端桌面(shinado.indi.piping) - 3.9.4 - 应用 - 酷安网
  10. c语言二级 试题答案,计算机二级c语言考试习题及答案