组合与计数
1.符号和基本公式
几种计算组合数取模的方法:
1.0 暴力计算,
快速阶乘:。。。
1.1 逆元
如果运用线性求逆元的手法()
可以优化到
1.2 模数太大的情况可以考虑Lucas定理
即,那么复杂度就是
简单计数问题:
对于数列A,,求对某个数取模的值
max和min的部分可以分开处理,实际上就是求有多少个大小为k的集合使得每个数成为最大值或最小值。
按照a_i排序,此时第i个数成为最大值的方案数为C(i-1, k-1),最小值的方案数为C(n-i, k-1)。
剩下的就是求组合数了。由于模数可能比较玄学,所以要使用crt以及快速阶乘
不简单的计数问题
询问如下多重集(数字可以重复的集合)的个数:
这个集合中有n个数字,每个数字在1..L之间,n为偶数。
这n个数字能分成n/2组,使得每组有两个数,且这两个数的积不超过c。
答案很大,对10^9+7取模。
约定:
很不简单的计数问题
给定n,m,求n个点m条边的无向联通图个数
http://jiaqiyang.com/2016/04/01/Counting-the-number-of-connected-graphs/
先码着