组合数计算C(n,m)加取模情况

本文介绍了如何线性计算组合数C(n,m),避免递归导致的效率低下或超时问题。通过从C(n,1)开始逐步计算到C(n,m),利用递推公式和取模技巧,确保计算过程正确且快速。适用于需要快速求解大数模意义下组合数的场景。" 115186516,10764818,Java控制流程:选择与循环结构详解,"['Java基础', '控制流程', '编程语法']
摘要由CSDN通过智能技术生成

想法:以前做比赛的时候遇到很多需要计算组合数的情况,都是当时手敲的,写递归不是暴就是超时啥的,或者是因为要取模,然后还要求逆元,所以敲得不是慢就是老是出问题,所以现在搞出模板来以后用就快了。

一:线性求C(n,m)

解释:由HDU 4927这道题求的组合数,可以了解到组合数的一些递推快速求法,因为这道题就是卡组合数的时间的。如果我们要算C(10,4),我们可以先算C(10,1),再算C(10,2),再算C(10,3),再算C(10,4)。为什么我要这么求呢?

因为:C(10,1)=10/1,然后C(10,1)*9/2就等于C(10,2)了,即C(10,2)=10*9/(2*1);然后C(10,2)*8/3就等于C(10,3)了,即C(10,3)=10*9*8/(3*2*1);然后C(10,3)*7/4就等于C(10,4)了,即C(10,4)=10*9*8*7/(4*3*2*1)。刚开始我还担心分子除以分母的时候可能会不得整除呢,但是放心,已经证明过了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值