Lucas定理(大组合数的取模)
来源:互联网 发布:ubuntu的samba服务器 编辑:程序博客网 时间:2024/05/23 15:19
首先给出这个Lucas定理:
A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。
则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) mod p同余
即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p)
这个定理的证明不是很简单,我一直想找个很好的证明,但是,没找到,昨天看到了一个解题报告,基本上可以说明白这个Lucas定理是怎么回事了,具体的是说:以求解n! % p为例,把n分段,每p个一段,每一段求的结果是一样的。但是需要单独处理每一段的末尾p, 2p, ...,把p提取出来,会发现剩下的数正好又是(n / p)!,相当于划归成了一个子问题,这样递归求解即可。
这个是单独处理n!的情况,当然C(n,m)就是n!/(m!*(n-m)!),每一个阶乘都用上面的方法处理的话,就是Lucas定理了,注意这儿的p是素数是有必要的。
Lucas最大的数据处理能力是p在10^5左右,不能再大了,hdu 3037就是10^5级别的!
对于大组合数取模,n,m不大于10^5的话,用逆元的方法,可以解决。对于n,m大于10^5的话,那么要求p<10^5,这样就是Lucas定理了,将n,m转化到10^5以内解。
然后再大的数据,我就不会了!
推荐题:hdu 3037
0 0
- Lucas定理(大组合数的取模)
- Lucas定理与大组合数的取模的求法总结
- Lucas定理与大组合数的取模的求法总结
- Lucas定理与大组合数的取模的求法总结
- Lucas定理与大组合数的取模的求法总结
- 组合数对素数取模 Lucas定理
- hdu3037 隔板法+Lucas定理求大组合取模
- JOJ1595:Combinations(求解大组合数,Lucas定理)
- 组合数/Lucas定理
- 组合取模问题与Lucas定理
- 求大组合数取模的模板(lucas定理)
- Lucas定理(大组合数取模)
- HDU 3037 Saving Beans 大组合数 lucas定理
- 组合数中的Lucas定理
- hdu3037 组合数 lucas定理
- Lucas定理求组合数
- Lucas定理 大组合数取模
- 【HDOJ 5794】A Simple Chess(大组合数Lucas定理+容斥)
- 合并两个排序的链表
- 微信支付的一点操作经验
- 15_09_15 ( NullPointerException ) 空指针异常
- DrawText()
- 实现Singleton模式
- Lucas定理(大组合数的取模)
- PostgreSQL与MySQL比较
- liunx操作系统实现u盘的挂载和读取----redhut
- 深度优先搜索和广度优先搜索的代码实现
- 点击tr实现选择checkbox功能,点击checkobx的时候阻止冒泡事件
- C++虚函数与纯虚函数的区别
- 地图的相关使用(定位,地理编码,导航)
- zrclistview
- nginx配置详细说明