组合数学笔记

来源:互联网 发布:马云放弃淘宝c店 编辑:程序博客网 时间:2024/06/06 00:36

从n个数中选m个数,每个数至多选一次,方案数
性质:C(n,0)=C(n,n)=1
C(n,m)=C(n,n-m)
C(n,m)=C(n-1,m-1)+C(n-1,m)(杨辉三角)
二项式展开(x+y)^n=Σi=0..n C(n,i)x^iy^n-i

那这里先说一下杨辉三角:【前提:每行端点与结尾的数为1】

每个数等于它上方两数之和。

每行数字左右对称,由1开始逐渐变大。

第n行的数字有n项。第n行数字和为2n-1。

第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。

每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。

(a+b)^n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。

将各行数字相排列,可得11的n-1(n为行数)次方:1=11^0; 11=11^1; 121=11^2……当n>5时会不符合这一条性质,此时应把第n行的最右面的数字”1”放在个位,然后把左面的一个数字的个位对齐到十位… …,以此类推,把空位用“0”补齐,然后把所有的数加起来,得到的数正好是11的n-1次方。以n=11为例,第十一行的数为:1,10,45,120,210,252,210,120,45,10,1,结果为 25937424601=11^10。

求组合数除了杨辉三角还有Lucas
这里说一下Lucas?
对于C(n, m) mod p。这里的n,m,p(p为素数)都很大的情况。就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了。
对于单独的C(ni, mi) mod p,已知C(n, m) mod p = n!/(m!(n - m)!) mod p。显然除法取模,这里要用到m!(n-m)!的逆元
逆元是什么呢?
根据费马小定理: (m!(n-m)!)的逆元为 (m!(n-m)!)^(p-2)

这里写图片描述

证明嘛…….去问卢卡斯

可以预处理的情况是min(n,mod)可以当做数组下标,此时预处理什么阶乘啊,线性求逆元啊都是很好的
但是当这两个数都是1e9++的时候,你只能手动阶乘啦

原创粉丝点击