先说下lucas定理

1)Lucas定理:p为素数,则有:

(2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0 (注意 这里()p表示的是p进制数),m=[m/p]*p+b0其次,我们知道,对任意质数p有(1+x)^p=1+(x^p)(mod p) 。我们只要证明这个式子:C(n,m)=C([n/p],[m/p]) * C(a0,b0)(mod p),那么就可以用归纳法证明整个定理。对于模p而言,我们有下面的式子成立:

上式左右两边的x的某项x^m(m<=n)的系数对模p同余。其中左边的x^m的系数是 C(n,m)。 而由于a0和b0都小于p,因此右边的x^m 一定是由 x^([m/p]*p) 和 x^b0 (即i=[m/p] , j=b0 ) 相乘而得 因此有:C(n,m)=C([n/p],[m/p]) * C(a0,b0)  (mod p)。

简化之后就有lu(n,m,p)=c(n%p,m%p,p)*lu(n/p,m/p,p)%p;

通过这个定理我们可以把c(n,m)的数量级降低,然后在计算组合数的时候,如果c(n,m)的值还是很大,我们可以用唯一分解定理来递推。

在计算c(n,m,p)的过程中,记得合理使用同余定理,这里由于有除数还要用到逆元。

http://acm.hdu.edu.cn/showproblem.php?pid=3037

题意:对于m个豆子,我们要存放在n颗树里,问有多少中存放方式。

题解:由于没有规定一定要把豆子全都放在树里,也就是说可能存在剩余的豆子。我们假设剩余的豆子在第n+1颗树上,用x(n)表示第n颗树上的豆子数量。那么就有 x(1)+x(2)+....x(n)+x(n+1)=m。我们左右两边都加上n+1个1那么就有x(1)+1+x(2)+1+....x(n+1)+1=m+n+1;这个等式的求解我们可以理解为从长度为n+m+1的绳子中切出n+1段来,典型的插板法(插板法的简单介绍https://wenku.baidu.com/view/7300b5745acfa1c7aa00cc5f.html),那么问题很明确了 就是求c(n+m,n)模p。

(假设一线段的最小单位为1,我们相把长度为n的线段划分为m段,那么我们可供划分的位置有n-1,需要在这些位置中选m-1个位置做处理所以结果为c(n-1,m-1)---- 插板法)

// x1+x2+x3+x4+x5+...xn=z 的整数解的个数 这里得注意巧用插板法来解决问题

ac代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long int ll;
ll n,m,p;
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}ll temp=exgcd(b,a%b,y,x);y-=(a/b)*x;//
    return temp;
}
ll inv(ll b,ll p)// 求逆元
{ll x,y;ll temp=exgcd(b,p,x,y);if(x < 0) x+=(p/temp);return x;
}
ll c(ll n,ll m,ll p)
{ll a,b;a=b=1;if(m > n) return 0;while(m){a=(a*n)%p;b=(b*m)%p;n--;m--;}return (ll)a*inv(b,p)%p;
}
ll lucas(ll n,ll m,ll p)
{if(m==0) return 1;return (ll)lucas(n/p,m/p,p)*(ll)c(n%p,m%p,p)%p;
}
int main()
{int t;cin>>t;while(t--){cin>>n>>m>>p;cout<<lucas(n+m,n,p)<<endl;}return 0;
}

转载于:https://www.cnblogs.com/z1141000271/p/7214295.html

3037 插板法+lucas相关推荐

  1. [HDU3037]Saving Beans,插板法+lucas定理

    [基本解题思路] 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个"档板"插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号 ...

  2. ZOJ 3557 (插板法+Lucas定理)

    题意:从n数中选出m个数,要求任意两个数不相邻,求方案数题意:从n数中选出m个数,要求任意两个数不相邻,求方案数题意:从n数中选出m个数,要求任意两个数不相邻,求方案数 题解:n个数中取m个,则还剩下 ...

  3. zoj3557 插板法卢卡斯求组合数取模

    题意:给一个集合,一共n个元素,从中选取m个元素,选出的元素中没有相邻的元素的选法一共有多少种?  插板法的经典应用   0.首先我们拿出m个小球,还剩下n-m个小球.这n-m个小球一共有n-m+1个 ...

  4. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  5. 排列组合之插板法及变形

    主要用于"相同元素"分到"不同容器"的排列组合. [例1] 共有10本相同的书分到7个班里,每个班至少要分到一本书,问有几种不同分法? [解析]注意,这里面有个 ...

  6. ACM中的整数K拆分 (有条件限制 无条件限制 插板法 URAL-1036 HDU-6397)

    整数的K拆分 整数K拆分示例 在程序设计竞赛中,我们会经常遇到一类整数 KKK 拆分的问题. 例如:求 NNN 个非负整数之和为 SSS 的方案数(每个数字都小于 MMM). 对于这类问题,分为两种情 ...

  7. 分糖问题和插板法:10个相同糖果分给3个小朋友,有几种分法?

    [1].10个相同的糖果,分给3个孩子A.B.C,每个孩子至少一个,有多少种不同的分法? [2].10个相同的糖果,分给3个孩子A.B.C,有多少种不同的分法? [3].10个相同的糖果,分给3个孩子 ...

  8. [BZOJ1974][SDOI2010]代码拍卖会[插板法]

    题意 询问有多少个数位为 \(n\) 的形如 \(11223333444589\) 的数位值不下降的数字在\(\mod p\) 的意义下同余 \(0\). $n\leq 10^{18} ,p\leq ...

  9. 51nod 1509 加长棒 插板法

    现在有三根木棒,他们的长度分别是a,b,c厘米.你可以对他们进行加长(不同的木棒可以增加不同的长度),他们总的加长长度不能超过L厘米.你也可以不对他们进行加长. 现在请你计算一下有多少种加长的方式使得 ...

  10. atcoder Beginner Contest 156 Roaming(组合数学 插板法)

    题目大意: 有n个数,每个都是1,我们每次可以选择1个数减1,然后让另外一个数加1.但是我们不能生成负数.问我们假如进行k次操作,问我们这n个数能产生多少种不同的组合.注意[1,0,2]和[2,0,1 ...

最新文章

  1. 学完计算机之后的感受,计算机教学心得心得体会
  2. redis数据类型_认识Redis与Redis的数据类型
  3. js判断是由含有a节点_怎么判断某个dom节点是否包含某个dom节点?
  4. 前端学习(2045)vue之电商管理系统电商系统之优化chainwebpack自定义打包入口
  5. LoadRunner远程监测Centos服务性能配置过程
  6. 淮海工学院期末考试Oracle,淮海工学院大一物理期末试卷
  7. 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...
  8. 如何安装Windows7多语言支持
  9. PHP模拟实现url rewrite
  10. picpick尺子像素大小精度不够准确_袖珍大小MFJ-223 1-60MHz彩色图形VNA矢量网络分析仪...
  11. 随机函数_巧用随机函数,生成各种姓名组合。
  12. Linux学习笔记总结
  13. 囧从流氓同事的河蟹喜酒归来......
  14. Excel 2010 VBA 入门 128 在窗体中插入控件
  15. 反证法与归谬法的区别
  16. 计算机怎么审单流程,电子审单
  17. glassfish java环境_GlassFish安装和配置详解
  18. python抢购茅台抢购描述
  19. java 中查询余额怎么写_查询余额示例代码
  20. String类中getBytes()方法的使用

热门文章

  1. 2.Java再识:使用MyEclipse开发java程序
  2. windows中的DOS命令及变量
  3. Serverless实战——2分钟,教你用Serverless每天给女朋友自动发土味情话
  4. IMRAM: Iterative Matching with Recurrent Attention Memory for Cross-Modal Image-Text Retrieval
  5. 基于Flink的JDBC插入Nested结构数据到Clickhouse
  6. mysql实现添加图片_如何往mysql中添加图片
  7. 兰浦秋来烟雨深 几多情思在琴心
  8. 达人评测 iPad Pro 2021怎么样
  9. html页面生成easyui,Easyui 为网页创建边框布局_EasyUI 教程
  10. 使用Java Swing编写文件操作管理器