概率论中的组合数应该比较熟悉吧,在数论中组合数也具有重大意义,下面介绍组合数的解法:

方法一O(n^2):

利用公式(n,m)=(n-1,m-1)+(n-1,m):

模板:

#include<cstdio>
const int N = 2000 + 5;
const int MOD = (int)1e9 + 7;
int comb[N][N];//comb[n][m]就是C(n,m)
void init(){for(int i = 0; i < N; i ++){comb[i][0] = comb[i][i] = 1;for(int j = 1; j < i; j ++){comb[i][j] = comb[i-1][j] + comb[i-1][j-1];comb[i][j] %= MOD;}}
}
int main(){init();
}

方法二(O(n)):

因为大部分题都有求余,所以我们大可利用逆元的原理(没求余的题目,其实你也可以把MOD自己开的大一点,这样一样可以用逆元做)。利用公式:

我们需要求阶乘和逆元阶乘。

模板:

const int MOD = (int)1e9 + 7;
int F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘
void init(){inv[1] = 1;for(int i = 2; i < N; i ++){inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD;}F[0] = Finv[0] = 1;for(int i = 1; i < N; i ++){F[i] = F[i-1] * 1ll * i % MOD;Finv[i] = Finv[i-1] * 1ll * inv[i] % MOD;}
}
int comb(int n, int m){//comb(n, m)就是C(n, m) if(m < 0 || m > n) return 0;return F[n] * 1ll * Finv[n - m] % MOD * Finv[m] % MOD;
}
int main(){init();
}

转载于:https://www.cnblogs.com/FrankChen831X/p/10665895.html

求组合数的O(n^2)和O(n)解法及模板相关推荐

  1. 算法刷题-数论-组合数、快速幂、逆元、递推求组合数、逆元求组合数

    文章目录 acwing885. 求组合数 I(递推:数据范围:2000) acwing875. 快速幂(a的k次方 模 b) acwing876. 快速幂求逆元 acwing886. 求组合数 II( ...

  2. Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 离散化】

    任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...

  3. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  4. 1100: 求组合数(函数专题)

    1100: 求组合数(函数专题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 6264 解决: 4653 [提交] [状态] [讨论版] [命题人:admin] 题目描述 马上要举办新生 ...

  5. ZZULIOJ 1100: 求组合数(函数专题)

    求组合数(函数专题) 题目描述 马上要举办新生程序设计竞赛了,与以往不同的是,本次比赛以班为单位,为了全面衡量一个班级的整体水平,要求从一个班的m位同学中任选k位同学代表本班参加比赛,问有多少种组合方 ...

  6. java实现n选m组合数_求组合数m_n

    下面为求取组合数的代码: 1 #include #define MAX 10009 int prime[168]; void print(int *v, int length) { int i = 0 ...

  7. 求组合数(完善中.......)

    1.杨辉三角递推法 void init_trangle() {for(int i = 0; i < 500; i ++){cc[i][0] = cc[i][i] = 1;for(int j = ...

  8. 求组合数(不同类型的组合数C++)

    求组合数有许多种不同的算法,要根据不同的数据量大小选择不同的算法 类型1 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cba mod(109+7)的值. 输入格式 第一行包含整数 n. ...

  9. 数学知识—不同数据范围求组合数,例题、思路、代码实现

    求组合数1: 题目链接:885. 求组合数 I - AcWing题库 题面: 第一行包含整数 n. 接下来 n 行,每行包含一组 a 和 b. 1<=n<=10000 1<=b< ...

最新文章

  1. MT8870DTMF解码器测试
  2. jQuery Layer 弹层组件
  3. Redmi 卢伟冰:要做就做真旗舰 绝不通过简配压低成本
  4. python oop编程_23 Python - 面向对象编程OOP
  5. oracle和sqlserver数据库直接生成xml
  6. matlab 实现批量修改文件后缀名 案例
  7. eclipse换炫酷主题
  8. PDF不小心删掉了怎么恢复?4个方法隔壁家老王已经恢复了
  9. matlab实现隐函数求偏导数(impldiff函数)
  10. Googgle guava ImmutableCollections
  11. 德国人的数学题375=1
  12. 什么是视频监控平台的平台对接
  13. HTML5学习第6篇—video:自己实现video的播放控件(添加样式版)
  14. spring boot 2.0 配置logback日志
  15. 解决ubuntu下微信不能发图片的问题。
  16. 深度学习机器人交易_使用深度学习创建股票交易机器人
  17. SIMULIA-达索系统一体化仿真解决方案
  18. Win8 纯净版安装详细教程
  19. 云台山茶旅集团各分子版块日新月(2月20日)
  20. STM32F1案例 ST7735 TFT液晶显示屏综合库使用

热门文章

  1. micropython socket_Micropython之HTTP-GET方法2
  2. 继承复习-发均分红包案例
  3. numpy学习笔记(莫烦python)
  4. JavaSE(十九)——equals() 和 == 的区别
  5. Labview 2017安装教程
  6. 命令行参数实现10万行小字典程序并输出查找时间
  7. android air创建文件夹,安卓版Airdrop将上线:无需安装APP,轻松实现文件隔空投送...
  8. Win7下运行VC程序UAC权限问题
  9. 深入解析windows XP/2003:内核模式和用户模式
  10. 关于计算机和人物的英语短文,人脑和电脑英语作文