题目可以转换成 x1+x2+……+xn=m 有多少组解,m在题中可以取0-m。

x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为:
(m+1)*(m+2)...(m+n-1) = C(m+n-1,n-1) = C(m+n-1,m)

现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k-1)得
C(n-1,0)+C(n,1)+...+C(n+m-1,m)
= C(n,0)+C(n,1)+C(n+1,2)+...+C(n+m-1,m)
= C(n+m,m)

现在就是要求C(n+m,m) % p,其中p是素数。
然后利用Lucas定理的模板就可以轻松的求得C(n+m,m) % p的值
下面简单介绍一下Lucas定理:
Lucas定理是用来求 C(n,m) mod p的值,p是素数(从n取m组合,模上p)。
描述为:
Lucas(n,m,p)=C(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;

求一个组合数最后可化简为(a/b)%p

(a/b)%p可以转换成a*Inv(b,p) Inv(b,p)为b对p的逆元。

逆元 :(b/a) (mod n) = (b * x) (mod n)。 x表示a的逆元。并且 a*x ≡ 1 (mod n ) 注意:只有当a与n互质的时候才存在逆元

Sample Input
2
1 2 5
2 1 5

Sample Output
3
3

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <string>
 6 # include <cmath>
 7 # include <queue>
 8 # define LL long long
 9 using namespace std ;
10
11 LL  n, m, p;
12
13 LL Ext_gcd(LL a,LL b,LL &x,LL &y){
14    if(b==0) { x=1, y=0; return a; }
15    LL ret= Ext_gcd(b,a%b,y,x);
16    y-= a/b*x;
17    return ret;
18 }
19 LL Inv(LL a,int m){   //求逆元
20    LL d,x,y,t= (LL)m;
21    d= Ext_gcd(a,t,x,y);
22    if(d==1) return (x%t+t)%t;
23    return -1;
24 }
25
26 LL Cm(LL n, LL m, LL p)  //求组合数
27 {
28     LL a=1, b=1;
29     if(m>n) return 0;
30     while(m)
31     {
32         a=(a*n)%p;
33         b=(b*m)%p;
34         m--;
35         n--;
36     }
37     return (LL)a*Inv(b,p)%p;  //(a/b)%p 等价于 a*(b,p)的逆元
38 }
39
40 int Lucas(LL n, LL m, LL p)  //把n分段递归求解相乘
41 {
42     if(m==0) return 1;
43     return (LL)Cm(n%p,m%p,p)*(LL)Lucas(n/p,m/p,p)%p;
44 }
45
46 int main()
47 {
48     //freopen("in.txt","r",stdin) ;
49     int T;
50     cin >> T;
51     while(T--)
52     {
53         cin>>n>>m>>p ;
54         cout<<Lucas(n+m,m,p)<<endl ;
55     }
56     return 0;
57 }

View Code

转载于:https://www.cnblogs.com/mengchunchen/p/4824299.html

hdu 3037 Lucas定理相关推荐

  1. HDU 3037 Saving Beans (Lucas法则)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3037 推出公式为C(n + m, m) % p. 用Lucas定理求大组合数取模的值 代码: #inc ...

  2. Saving Beans HDU - 3037(卢卡斯定理)

    Saving Beans HDU - 3037(卢卡斯定理) 题意: 他们想知道有多少种方法可以在n树中保存不超过m个bean(它们是相同的). 现在他们求助于你,你应该给他们答案. 结果可能非常巨大 ...

  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定理) + 快速幂 --- HDU 5226 Tom and matrix

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

  5. hdu 3944 DP? (Lucas 定理)

    仔细观察杨辉三角后可以发现从最高点到第n行第k个数的最短路为c(n+1,k); 根据Lucas定理可以求出,一般来说要求答案模去一个质数p且p的范围不大于10^5则可用Lucas. Lucas(n,m ...

  6. Lucas定理及组合数取模

    首先给出这个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] ...

  7. Lucas定理与大组合数的取模的求法总结

    Lucas定理与大组合数的取模的求法总结 分类: ACMer 数学 2012-03-11 09:38  1219人阅读  评论(0)  收藏  举报 c 首先给出这个Lucas定理: A.B是非负整数 ...

  8. 数论(Lucas定理) HDOJ 4349 Xiao Ming's Hope

    题目传送门 题意:求C (n,0),C (n,1),C (n,2)...C (n,n)中奇数的个数 分析:Lucas 定理:A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a ...

  9. szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}

    给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...

最新文章

  1. SAP WM 显示TR ITEM的标准报表LX09
  2. 互联网天生本质与产业大局的开始
  3. Android(安卓)一个简单的聊天界面的实现(eclipse实现)
  4. 融合升级谋定功能性-农业大健康·林裕豪:哲商对话从玉农业
  5. 绘制机械图c语言编程,求用C语言绘制机械三视图程序?
  6. 海量数据拆分到nosql系统的一种方案
  7. log4j2 mysql_spring boot使用log4j2将日志写入mysql数据库
  8. HTML5跑酷网页游戏源码
  9. 海康工业相机的一些坑(USB接口的相机连上halcon17后,客户端无法打开相机,错误是无驱动,但是驱动是好好的,如何解决)
  10. 两台电脑通过网线共享文件
  11. win7系统启动到一半停止_win7系统装到一半电脑死机怎么办
  12. Ambari2.7.4配置HIVE_AUX_JARS_PATH
  13. 小程序EXcel文件下载并打开
  14. NXP JN5169 读写片外 FLASH
  15. 想搭建一个专属于你的网站吗??新手向超详细攻略
  16. Rocket.chat 安装
  17. NVL和COALESCE的区别
  18. 分享技术人学习有用的国外网站
  19. [市场产品部]MP部副部长(陈晓慧):餐饮公司LOGO设计与制作
  20. 测试模型是出现:RuntimeErrorError(s) in loading state_dict for MIMO-UNet

热门文章

  1. fragtats中连接度指数(CONNECT)的具体解释
  2. 哔哩哔哩公司swot分析_是时候颠覆你的SWOT营销分析法了!TOWS分析法可能更适合你...
  3. mysql 加随机数,如何插入随机数MySql
  4. VSCODE 10个高效开发插件
  5. nginx location proxy_pass 后面的url 加与不加/的区别
  6. abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库
  7. python鼠标碰撞_Python+opencv第5节鼠标响应事件,pythonopencv,第五节
  8. VINS简化版本 梳理
  9. JS-面向对象-改变This的指向---使用call方法改变this的指向 / 使用apply方法改变this的指向 / 使用bind方法改变this的指向
  10. C++primer 9.3.3节练习