排列组合板子A(n,m)C(n,m) ; 递推组合数公式 ; 杨辉三角

1.直接求组合数:

组合数C(n,m),n个里面选m个,结果为 n ! / ( n − m ) ! m ! \frac{n! / (n-m)!}{m!} m!n!/(nm)!(前者其实就是n* n-1*…*n-m+1,分子分母都是m个数相乘)

ksm快速幂求的是逆元。用的是费马小定理,适用于模数为素数的时候。

快速幂板子

(板子中a是阶乘数组,预处理一下)

a[0] = 1;
for(int i=1;i<=n+k;i++)
	a[i] = i*a[i-1]%mod;
ll ksm(int x, int y, int mod) 
{
	if (x == 1) return 1;
	ll res = 1, base = x;
	while (y) {
		if (y & 1) res = (res * base) % mod;
		base = (base * base) % mod;
		y >>= 1;
	}
	return res;
}
ll C(ll n, ll m, ll p)
{
	if (m > n)return 0;
	return ((a[n] * ksm(a[m], p - 2, p)) % p * ksm(a[n - m], p - 2, p) % p);
}
ll A(ll n, ll m, ll p)
{
	if (m > n)return 0;
	return (a[n] * ksm(a[n - m], p - 2, p)) % p;
}

2.递推组合数公式:

C ( n , m ) = C ( n − 1 , m ) + C ( n − 1 , m − 1 ) C(n, m) = C(n - 1, m) + C(n - 1, m - 1) C(n,m)=C(n1,m)+C(n1,m1)

我们拿出一个元素,剩下n-1个。要么在 n-1 里面选 m 个,要么这个加上 n-1 里面选 m-1 个

private static final int MX = 31;
private static final int[][] c = new int [MX][MX];

static {
    c[0][0] = c[1][0] = 1;
    for(int i=1;i<MX;i++)
    {
        c[i][0] = 1;
        for(int j=1;j<=i;j++)
        {
            c[i][j] = c[i-1][j] + c[i-1][j-1];
        }
    }
}
// 1 1

// 2 1 , 2 2

// 3 1 , 3 2 , 3 3

// 4 1 , 4 2 , 4 3 , 4 4

3.杨辉三角

上面这个递推结果正是杨辉三角。

// 1

// 1 1

// 1 2 1    

// 1 3 3 1                 C(3,0) C(3,1) C(3,2)

// 1 4 6 4 1               C(4,0) C(4,1) C(4,2)

力扣401周赛T2

相关推荐

  1. 三角

    2024-06-12 09:08:02       39 阅读
  2. 三角(Python)

    2024-06-12 09:08:02       39 阅读
  3. leetcode-三角

    2024-06-12 09:08:02       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 09:08:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 09:08:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 09:08:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 09:08:02       18 阅读

热门阅读

  1. 前端框架是什么

    2024-06-12 09:08:02       5 阅读
  2. Apache Hadoop的核心组成及其架构

    2024-06-12 09:08:02       7 阅读
  3. AI生成沉浸式3D世界(空间照片/视频)

    2024-06-12 09:08:02       6 阅读
  4. PHP 中如何高效地处理大规模数据的排序?

    2024-06-12 09:08:02       9 阅读
  5. 【深度学习】【NLP】Bert理论,代码

    2024-06-12 09:08:02       6 阅读
  6. Python中实现高效缓存机制的探索与实践

    2024-06-12 09:08:02       9 阅读
  7. Web前端教程165:深入探索Web前端技术的奥秘

    2024-06-12 09:08:02       9 阅读
  8. Unity3D MMORPG背包系统数据获取与通讯详解

    2024-06-12 09:08:02       8 阅读
  9. 设计模式之外观模式

    2024-06-12 09:08:02       10 阅读