自湖南长沙培训以来的坑。。。一直未填,今天把这个问题解决掉。

参考:

1.http://www.cnblogs.com/Var123/p/5523068.html

2.http://blog.csdn.net/qzh_1430586275/article/details/51893154

3.http://blog.csdn.net/check_check_check/article/details/52101467

一、lucas定理的定义

(当且仅当p为质数)

很简短,下面看看应用和相关题目。

二、lucas定理的应用

1、[bzoj4591][Shoi2015][超能粒子炮·改]

题目描述:求 C(n,0)+C(n,1)+...+C(n,k)mod2333

推到过程:

易得,

原式=C(n/2333,0)∗C(nmod2333,0)+C(n/2333,0)∗C(nmod2333,1)+...+C(n/2333,k/2333)∗C(nmod2333,kmod2333)   mod 2333

也就是将原式中的各个mod 2333项拆分成两项再总体mod 2333

同类项合并,分两种部分考虑:
设k=k1*2333+k2 (0≤k1,k2)
1)对于k1部分
先考虑k1=0的情况,可以得出这些乘积的各个首项是C(n/2333,0),将其提出得到C(n/2333,0)*∑C(n%2333,i)(其中i∈[0,2333])
考虑k1=1的情况,可得C(n/2333,1)*∑C(n%2333,i)(其中i∈[0,2333])
考虑k1=2的情况,可得C(n/2333,2)*∑C(n%2333,i)(其中i∈[0,2333])
···  ···  ···  ···  ···  ···
提公因式→→→∑C(n/2333,j)*∑C(n%2333,i)(其中i∈[0,2333],j∈[0,k1))
重复3遍
∑C(n/2333,j)*∑C(n%2333,i)(其中i∈[0,2333],j∈[0,k1))
∑C(n/2333,j)*∑C(n%2333,i)(其中i∈[0,2333],j∈[0,k1))
∑C(n/2333,j)*∑C(n%2333,i)(其中i∈[0,2333],j∈[0,k1))
吼,各位就等了,看看k2部分吧
2)对于k2部分
原式=C(n/2333,k1)*C(n%2333,0)+C(n/2333,k1)*C(n%2333,1)+······+C(n/2333,k1)*C(n%2333,k%2333)
=C(n/2333,k1)*(∑C(n%2333,i))(其中i∈[0,k%2333])
综上,ans=∑C(n/2333,j)*∑C(n%2333,i)(其中i∈[0,2333],j∈[0,k1))+C(n/2333,k1)*(∑C(n%2333,i))(其中i∈[0,k%2333])
 
说了这么多,那么这个定理的用法是什么?
显然是递归求解组合数的模数咯~
 

所以对于这道题,我们先预处理出一个S(n,k)=∑C(n,i) (i∈[0,k]) (当然最后都是mod p意义下的),ans=S(n%2333,2332)*(∑C(n/2333,j)) (j∈[0,k1)) + C(n/2333,k1)*S(n%2333,k%2333)

ans中的S()一定可以用二维的东西在规定时空内求出,而∑C(n/2333,j)就是我们超能粒子炮`改的子问题,递归求解即可,另,C(n/2333,k1)也可以用lucas定理递归来解

于是这道题就口头ac了。

lucas定理和组合数学的更多相关文章

  1. lucas定理,组合数学问题

    对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况.就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 这里用到Lusac定理 ...

  2. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

  3. HDU 5226 Tom and matrix(组合数学+Lucas定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...

  4. Lucas定理及应用

    额,前两天刚讲了数据结构,今天我来讲讲组合数学中的一种奇妙优化——Lucas 先看这样一个东西 没学过lucas的肯定会说:还不简单?处理逆元,边乘边膜呗 是,可以,但注意一下数据范围 你算这一次,你 ...

  5. [学习笔记]扩展LUCAS定理

    可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...

  6. hdu 3037 费马小定理+逆元除法取模+Lucas定理

    组合数学推推推最后,推得要求C(n+m,m)%p 其中n,m小于10^9,p小于1^5 用Lucas定理求(Lucas定理求nm较大时的组合数) 因为p数据较小可以直接阶乘打表求逆元 求逆元时,由费马 ...

  7. Lucas定理初探

    1.1 问题引入 已知\(p\)是一质数,求\(\dbinom{n}{m}\pmod{p}\). 关于组合数,它和排列数都是组合数学中的重要概念.这里会张贴有关这两个数的部分内容. 由于Lucas定理 ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

随机推荐

  1. linux下的C语言开发 GDB的例子

    在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

  2. JeePlus:目录

    ylbtech-JeePlus:目录 1.返回顶部 0. http://www.jeeplus.org/ 0.2.文档 http://wiki.jeeplus.org/docs/show/75 0.3 ...

  3. Java中的经典算法之冒泡排序

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  4. 4-2 买家类目-dao(下)

    查询出来的对象ProductCategory就已经有updateTime和createTime了,然而你只是把对象的categoryType给修改了一下,修改之后就执行save方法保存了.所以它还是原 ...

  5. E20170610-hm

    presence  n. 出席; 仪表; 风度; 鬼魂,神灵; defence   n. 防御; 辩护; 防御工事; 后卫; phyle  n. 种族,宗族; race  n. 赛跑; 民族; 人种; ...

  6. 牛客OI周赛2-提高组

    A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  7. 洛谷P3400 仓鼠窝(单调栈)

    P3400 仓鼠窝 题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子 ...

  8. [Swift通天遁地]一、超级工具-(19)制作六种别具风格的动作表单

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. [C++ STL] map使用详解

    一.set介绍: Map由红黑树实现,其元素都是"键值/实值"所形成的一个对组(key/value pairs).每个元素有一个键,是排序准则的基础.每一个键只能出现一次,不允许重 ...

  10. [C和指针] 4-语句、5-操作符和表达式

    第4章 语句 4.1 表达式语句 C并不存在专门的"赋值语句",赋值就是一种操作,就像加法和减法一样,所以赋值就在表达式内进行. 你只要在表达式后面加上一个分号,就可以把表达式转变 ...