组合数学中的常见定理&组合数的计算&取模
2016-04-18 14:52
323 查看
组合数的性质:
C(n,m)=C(n,n-m);
C(n,m)=n!/(m!(n-m)!);
组合数的递推公式:
C(n,m)= C(n-1,m-1)+C(n-1,m);
组合数一般数值较大,题目会要求取模;而求组合数的过程中一般会用到除法,所以会涉及除法取模的知识;
在除法取模的过程中,一般会求一个乘法逆元;
乘法逆元的定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元;
求乘法逆元的方法:
(b/a)modp;(a|b)p为质数;
1.欧拉定理或者费马小定理:
费马小定理是欧拉定理的特殊情况;
费马小定理的定义及证明:链接
由
得b/a=(b/a)*(ap-1modp)=b/a*ap-1modp=b*ap-2modp;
除法就被消去了;
而这样做还有一个问题就是p-2一般很大,(因为p一般都取1e9+7,NND,我记得有次BC的题是1e8+7直接把我坑惨了);这时就用快速幂求啦;
附上快速幂的模板:
2.扩展欧几里得算法:
当n,m都很大不能一个一个数相乘得到时,这时就需要Lucas定理了;(有心情有时间再来写)
C(n,m)=C(n,n-m);
C(n,m)=n!/(m!(n-m)!);
组合数的递推公式:
C(n,m)= C(n-1,m-1)+C(n-1,m);
组合数一般数值较大,题目会要求取模;而求组合数的过程中一般会用到除法,所以会涉及除法取模的知识;
在除法取模的过程中,一般会求一个乘法逆元;
乘法逆元的定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元;
求乘法逆元的方法:
(b/a)modp;(a|b)p为质数;
1.欧拉定理或者费马小定理:
费马小定理是欧拉定理的特殊情况;
费马小定理的定义及证明:链接
由
得b/a=(b/a)*(ap-1modp)=b/a*ap-1modp=b*ap-2modp;
除法就被消去了;
而这样做还有一个问题就是p-2一般很大,(因为p一般都取1e9+7,NND,我记得有次BC的题是1e8+7直接把我坑惨了);这时就用快速幂求啦;
附上快速幂的模板:
ll fsat_pow(ll a,ll b) { ll s=1,base=a; while(b) { if(b&1) { s*=base; s%=mod; } base*=base; base%=mod; b=(b>>1); } return s; }
2.扩展欧几里得算法:
当n,m都很大不能一个一个数相乘得到时,这时就需要Lucas定理了;(有心情有时间再来写)
相关文章推荐
- linux shell 字符串操作(长度,查找,替换)详解
- JS运动中的部分实用函数总结
- Storm实战之WordCount
- iOS 单例模式
- js 调用方法,用ajax
- 模块的加载启动
- 4.18 图片切换【js基础应用】
- 代码导出job3--autopackstepARES3-UFT.bat
- VMware Player 7 下扩展 CentOS 7 硬盘空间
- 美国E&I功率放大器1240L
- JavaScript DOM(二)
- python 浮点数精确运算解决方案
- c primer plus 学习笔记(1)
- 360淘金平台正式启用WoSignDoc电子签名API接口
- 自主研发一套PHP前端开发框架(23)
- echarts-无数据时图显示气泡问题
- 在JavaScript中对HTML进行反转义
- 夺命雷公狗---Thinkphp----10之后台登录.注销一条龙
- hdu 5667 Sequence
- Redis 部署安装