组合数
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。

公    式:C(n,m)=n!/((n-m)!*m!)(m≤n)

性质1:C(n,m)= C(n,n-m)

性质2:C(n,m)=C(n-1,m-1)+C(n-1,m)

定义
组合是数学的重要概念之一。从 n 个不同元素中每次取出 m 个不同元素

,不管其顺序合成一组,称为从 n 个元素中不重复地选取 m 个元素的一个组合。所有这样的组合的种数称为组合数。

性质

1.互补性质

即从m个不同元素中取出n个元素的组合数=从m个不同元素中取出 (m-n) 个元素的组合数;

例如C(9,2)=C(9,7),即从9个元素里选择2个元素的方法与从9个元素里选择7个元素的方法是相等的。

规定:C(n,0)=1

2.组合恒等式

若表示在 n 个物品中选取 m 个物品,则如存在下述公式:C(n,m)=C(n,n-m)=C(n-1,m-1)+C(n-1,m)。

问题

用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。

由n个人里选k个人的组合数 = 由n-1个人里选k个人的组合数 + n-1个人里选k-1个人的组合数

从n-1个人增加到n个人,最后一个人可能被选中也可能不被选中,有两种情况:

1.不被选中,即需要从n-1个人中选择k个人。
2.被选中,即需要从n-1个人中选择k-1个人。
这两种情况加起来就是从n个人里选择k个人的组合数。

#include <iostream>
using namespace std;
// 计算从n个人里选k个人的组合数
int comm(int n, int k)
{if(k > n)return 0;else if(n == k || k == 0)return 1;elsereturn comm(n-1, k) + comm(n-1, k-1);
}int main()
{int n,k;cout<<"Please enter two integers n and k: ";cin>>n>>k;cout<<"C(n, k)="<<comm(n, k)<<endl;return 0;
}

卢卡斯定理(Lacus)求大组合数

现在来了新问题,如果n和m很大呢,

比如求C(n, m) % p  , n<=1e18,m<=1e18,p<=1e5

看到没有,n和m这么大,但是p却很小,我们要利用这个p

卢卡斯说要有

C(n, m) % p  =  C(n / p, m / p) * C(n%p, m%p) % p

于是便有了大组合数有解。

找了一个大佬的理解过程:

贴个模板:

const int p=1e9+7;
ll qmi(ll a,ll k)//用到快速幂/逆元/组合公式
{ll res=1;while(k){if(k&1)res=res*a%p;a=a*a%p;k>>=1;}return res;
}
ll C(int a,int b)
{ll res=1;for(ll i=1,j=a;i<=b;i++,j--){res=res*j%p;res=res*qmi(i,p-2)%p;}return res;
}
ll lucas(ll a,ll b)
{if(a<p&&b<p)return C(a,b);returnC(a%p,b%p)*lucas(a/p,b/p)%p;
}

const int p=998244353;
const int N=20000005;
typedef long long ll;
ll qmi(ll a,ll k,ll p)
{ll res=1;while(k){if(k&1)res=res*a%p;a=a*a%p;k>>=1;}return res;
}
ll fac[N];
void init()
{fac[0]=1;for(int i=1;i<=N-10;++i)fac[i]=fac[i-1]*i%p;
}
ll C(ll n,ll m)
{return fac[n]*qmi(fac[n-m]*fac[m]%p,p-2,p)%p;
}

组合数(卢卡斯定理)相关推荐

  1. 『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理

    组合数: 在N个数中选取M个数,问选的方式有几种? 直接递归暴力简单 #include<cstdio> const int N = 2000 + 5; const int MOD = (i ...

  2. 组合数学 —— 组合数取模 —— 卢卡斯定理与扩展卢卡斯定理

    [卢卡斯定理] 1.要求:p 是质数,m.n 很大但 p 很小 或者 n.m 不大但大于 p 2.定理内容 其中, 3.推论 当将 n 写成 p 进制:,将 m 写成 p 进制: 时,有: 4.实现 ...

  3. 组合数求解与(扩展)卢卡斯定理

    前言: 咳咳咳咳 ,最近瘟疫盛行,围观的记得要戴口罩. 求解组合数的方法大家应该都见了很多了,这篇博客将围绕这个问题进行归纳和深入学习. 问题: 给定 n , k , p n,k,p n,k,p求解组 ...

  4. 洛谷——P3807 【模板】卢卡斯定理

    P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...

  5. 卢卡斯定理及其卢卡斯定理的拓展

    前言: 求一个组合数 ,我们可以通过逆元的方式在 O(n)的时间复杂度内求出 但如果数特别大时(数据范围 ),又该怎么办 使用卢卡斯定理求解 卢卡斯定理:(组合数取模,取模的模数只能是质数) 即  模 ...

  6. 【启智树NOIP模拟】奇偶【卢卡斯定理】【背包】【bitset】

    题意:给定 nnn 个数 aia_iai​ ,求选出(可以重复,考虑顺序)MMM 个数和为 SSS 的方案数模 222. n≤200,ai≤105,M,S≤1018n\leq 200,a_i\leq ...

  7. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)

    注意到模数很小,容易想到使用卢卡斯定理,即变成一个2333进制数各位组合数的乘积.对于k的限制容易想到数位dp.可以预处理一发2333以内的组合数及组合数前缀和,然后设f[i][0/1]为前i位是否卡 ...

  8. 洛谷 P3807 【模板】卢卡斯定理

    题目背景 这是一道模板题. 题目描述 给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105) 求 C_{n+m}^{m}\ mod\ pCn+mm​ mod p 保证P为prim ...

  9. 洛谷 P4720 【模板】扩展卢卡斯定理/exLucas

    [模板]扩展卢卡斯定理/exLucas 题目背景 这是一道模板题. 题目描述 求 Cnmmodp{\mathrm{C}}_n^m \bmod{p}Cnm​modp 其中 C\mathrm{C}C 为组 ...

  10. 《夜深人静写算法》数论篇 - (22) 卢卡斯定理

    文章目录 前言 一.问题引入 1.递推公式 2.通项公式 二.卢卡斯定理 1.定义 2.证明 1)引理1 2)引理2 3)卢卡斯定理 前言     卢卡斯定理,ACM刷题中遇到过,用于组合数取模. 一 ...

最新文章

  1. Pytorch使用CPU运行“Torch not compiled with CUDA enabled”
  2. 计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...
  3. 信号公式汇总之傅里叶变换
  4. python文件打包成exe是 upx不可用、找不到py文件_使用PyInstaller将Python程序打包成一个单独的exe文件...
  5. Qt Creator管理会议
  6. 将redis加入到elk日志系统里
  7. 强化学习能挑战众多世界冠军,人类亦能利用强化学习成为冠军
  8. VC调用QT的UIDLL
  9. 人工智能/数据科学比赛汇总 2019.5
  10. 个人笔记上传 -- redis安装
  11. linux十大实用工具,10大好用的Linux实用工具推荐
  12. IOS开发之——数据库-Couchbase(05)
  13. Web前端工程师 VS 前端工程师?What?
  14. 约瑟夫问题c语言链表41人,约瑟夫问题 C语言链表实现
  15. 计算机445 135 139端口,Win7如何关闭445 135 138 139端口
  16. 基于Matlab的随机森林算法实现(附算法介绍及代码详解)
  17. 《爱上单片机》读后感——5年后终于了解什么是单片机
  18. 借助Excel批量重命名图片、文档,以及处理文件名中的空格问题(适合新手小白)
  19. Python学习之CSDN21天学习挑战赛计划之2
  20. Android帧动画框架

热门文章

  1. PDF内容太多分不清?这个PDF加页码的方法可以帮助你
  2. vue获取token 实现token登录
  3. d06调试详细说明_D06调试软件说明
  4. 饿了么api接口 php,饿了么接口:php
  5. 将C盘里的Users文件夹移动到D盘
  6. Apache ShenYu网关初体验
  7. 【论文泛读】Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  8. 面试相关-转载-well,yzl——持续更新
  9. 个人信贷不良资产成因和策略
  10. This relative module was not found: Error: Can‘t resolve ‘../assets/bg.jpg‘