Lucas' theorem

In number theory, Lucas's theorem expresses the remainder of division of the binomial coefficient by a prime number p in terms of the base p expansions of the integers m and n.     ----wiki



##表达式

对于非负整数mn和素数p,如果有:

![](http://7xrn7f.com1.z0.glb.clouddn.com/16-3-11/46939983.jpg)

则有下式成立:

![](http://7xrn7f.com1.z0.glb.clouddn.com/16-3-11/30039157.jpg)



##牛刀小试
题目链接:[hdu-3037](http://acm.hdu.edu.cn/showproblem.php?pid=3037)
题目大意:求在n棵树上摘不超过m颗豆子的方案,结果对p取模。
解题思路:
首先,n棵树上摘m课豆子的方案数相当于从n个数中可重复的选m个数的组合数,为。那么现在就是求


代码:
```c++
#include
#include
#include
using namespace std;
typedef long long LL;
const int N = 100001;
LL mod;
LL jc[N];

LL quick(LL a, LL b)

{

LL c = 1;

while(b)

{

if(b&1) c = c * a % mod;

b >>= 1;

a = a * a % mod;

}

return c;

}

LL NY(LL a)

{

return quick(a, mod-2);

}

void init()

{

jc[0] = 1;

for(LL i=1; i<mod; i++)

{

jc[i] = i * jc[i-1] % mod;

}

}

LL C(LL n, LL m)

{

if(n < m) return 0;

return jc[n] % mod * NY(jc[m]) % mod * NY(jc[n-m]) % mod;

}

LL Lucas(LL n, LL m)

{

if(!m) return 1;

return Lucas(n/mod, m/mod) * C(n%mod, m%mod) % mod;

}

int main()

{

LL n, m;

int t;

scanf("%d", &t);

while(t--)

{

scanf("%I64d %I64d %I64d", &n, &m, &mod);

init();

printf("%I64d\n", Lucas(n+m, m));

}

return 0;

}

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. Yii2 发送邮件

    http://www.cnblogs.com/wwolf/p/5438691.html?utm_source=tuicool&utm_medium=referral

  2. mysql5.5手册读书日记(4)

    <?php /* InnoDB事务模型和锁定 15.2.10.1. InnoDB锁定模式 15.2.10.2. InnoDB和AUTOCOMMIT 15.2.10.3. InnoDB和TRANS ...

  3. 本地化word复制来的网页中的图片

    复制一个网页到word文档中,图片会以链接到网页里图片,而不是本地化保存在文档里.为了让图片存在文档里,而不是每次链接到外部,可以这样做. 全选文档,菜单栏里的编辑,点击链接,断开所有链接. 然后再复 ...

  4. 【axc】简单的线性动画绘制

    在一个View上绘制一条直线  然后做出相应的动画效果  可以这样封装三个方法: /** *  划线工具 * *  @param lineArray   线段的点数组 NSValue 类型  默认第一 ...

  5. 代理传值Delegate

    代理方法中加入参数:[delegate passMeToOther:(id)self]:把自己传给别人.

  6. angularJs的ng-class切换class

    在angular中为我们提供了3种方案处理class: 1:scope变量绑定 2:字符串数组形式. 3:对象key/value处理. 第一种我们不推荐使用,看看其他两种解决方案: 字符串数组形式 字 ...

  7. wordpress搬家到本地URL修改问题

    把原来服务器上面的WordPress的数据库和目录文件全部备份下来,在本地用xampp搭了一个服务器,然后将数据库和目录文件全部导入,更改conf文件中的数据库账号密码.没想到本地网站的所有CSS样式 ...

  8. C++程序设计(一)

    1. 函数指针 程序运行期间,每个函数都会占用一段连续的内存空间.而函数名就是该函数所占内存区域的起始地址(也称"入口地址").我们可以将函数的入口地址赋给一个指针变量,使该指针变 ...

  9. LeetCode Palindrome Permutation II

    原题链接在这里:https://leetcode.com/problems/palindrome-permutation-ii/ 题目: Given a string s, return all th ...

  10. GIt的命令

    Git 命令 1,git init初始化当前文件夹为git仓库的根目录 2.git commit提交到本地仓库 3.git push origin master 提交到服务器 4.git log 查看 ...