额,前两天刚讲了数据结构,今天我来讲讲组合数学中的一种奇妙优化——Lucas

先看这样一个东西

没学过lucas的肯定会说:还不简单?处理逆元,边乘边膜呗

是,可以,但注意一下数据范围

你算这一次,你需要跑25000下

那么你如果求C199999 1~C199999 52222 呢?

你会发现你的复杂度上天了

所以我们会用到一个神奇的定理:Lucas定理

定理内容如下:
  Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p)

不好玩,是吗?

那么我来证明一下

由二项式定理可得,cmn等于(x+1)^m中n次项的系数

那么我们按Lucas展开

原式=(x+1)^(p^k*ak)*(x+1)^(p^(k-1)*a(k-1))*……*(x+1)^(p*a1)+(x+1)^(1*a0)

=[(x+1)^(p^k)]^ak……

由费马小定理可知,其%p后可转化为 (x+1)^ak*(x+1)^a(k-1)*……*(x+1)^a1*(x+1)^a0

原题转化为求上式的n次项的系数

同理,由于每一项已经消去了p^k次方 故即求每一项中的bk次项系数 即为Lucas

有什么用呢?

以前的组合数,我们一位一位地算(累死了)

现在的组合数,我们只用算%p出来的(这不就是log p m次吗?)

O(n)到O(logn)

大有长进啊

大家应该都会

下面看几道好题

combination【bzoj2928】

裸的板子,不说什么

《瞿葩的数字游戏》T3-三角圣地

带了预处理阶乘的Lucas

[SHOI2015]超能粒子炮·改

lucas合并

礼物,古代猪文

扩展Lucas

Lucas定理及应用的更多相关文章

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

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

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

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

  3. 大组合数:Lucas定理

    最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...

  4. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

  5. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

  6. hdu 3037 Saving Beans Lucas定理

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  8. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

    Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...

  9. HDU 4349 Xiao Ming's Hope lucas定理

    Xiao Ming's Hope Time Limit:1000MS     Memory Limit:32768KB  Description Xiao Ming likes counting nu ...

  10. HDU3037 Saving Beans(Lucas定理+乘法逆元)

    题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...

随机推荐

  1. java selector

    java selector使用select轮询注册到selector中的channel,如果有channel准备好注册的事件,select()返回,返回值为可以操作的channel的个数.通过sele ...

  2. webpack起步

    为什么要使用webpack 很牛逼的样子 https://www.webpackjs.com/comparison/ 基本概念 1. 入口(entry) module.exports = { entr ...

  3. JavaScript入门几个概念

    JavaScript入门几个概念 刚刚入门JavaScript的时候,搞懂DOM.BOM以及它们的对象document和window很有必要. DOM是为了操作文档出现的API,document是它的 ...

  4. FCKEditor编辑器添加中文字体的方法

    默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体.让其添加中文字体的方法: 1.打开 fckconfig.js 文件,找到第154行(大概),会发现: 程序代码: FCKConfig. ...

  5. Git回退到指定节点的版本

    1.获取某个历史版本的id(即change-id,每个版本唯一) 方法1:使用git log命令查看所有的历史版本,输入q便可退出. git log 方法2:使用gitk图形化界面查看节点信息.(在安 ...

  6. android 5.0 下载编译

    CM的CM-12.0版本(对应Android5.0.2): $ repo init -u https://github.com/CyanogenMod/android.git -b cm-12.0 注 ...

  7. android drag

    1.Android:Drag and Drop的应用 2.Android 用户界面---拖放(Drag and Drop)(三) 3.Android 用户界面---拖放(Drag and Drop)( ...

  8. 彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误

    利用adb shell进入系统,进入/data/app或者/data/data,删除跟你安装的apk同样的包名: 按Ctrl+C退出系统,利用adb pull /data/system/package ...

  9. Lucene.net入门学习(结合盘古分词)(转载)

    作者:释迦苦僧  出处:http://www.cnblogs.com/woxpp/p/3972233.html  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显 ...

  10. March 7 2017 Week 10 Tuesday

    Age is a very high price to pay for maturity. 年纪是成熟的代价. A high price, indeed a high price. It is bes ...