想法:以前做比赛的时候遇到很多需要计算组合数的情况,都是当时手敲的,写递归不是暴就是超时啥的,或者是因为要取模,然后还要求逆元,所以敲得不是慢就是老是出问题,所以现在搞出模板来以后用就快了。
一:线性求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)。刚开始我还担心分子除以分母的时候可能会不得整除呢,但是放心,已经证明过了