hdu3037(lucas定理)
给定n,m,p 表示<=m个豆子放在n棵树上,一共有多少种方案数, 总的方案书mod p
如果将m个豆子放在n棵树上, 可以使用插板法
得到方案数是C(n+m-1,n-1)
那么将0<=i<=m个豆子放在n棵上的方案数是 C(n+i-1,n-1)
即

其中C(n,k)=C(n-1,k)+C(n-1,k-1) 的意思是从n个数中取出k个的组合, 那么对于一个数来说,它要么不取,转为C(n-1,k), 要么取转为C(n-1,k-1)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <math.h>
using namespace std;
#pragma warning(disable:4996)
typedef long long LL;
const int INF = <<;
/* */ LL fact[]; LL pow(LL a, LL k, LL p)
{
LL ret = ;
while (k)
{
if (k & )
ret = ret * a %p;
a = a * a % p;
k >>= ;
}
return ret;
}
LL C(LL n, LL m, LL p)
{
if (n < m || m < ) return ;
LL a = fact[n], b = fact[n - m] * fact[m] % p;
return a * pow(b, p - , p) % p;
}
LL lucas(int n, int m, int p)
{
if (m == ) return ;
return C(n%p, m%p,p) * lucas(n / p, m / p, p) % p;
}
int main()
{
int t, n, m, p;
scanf("%d", &t);
while (t--)
{
scanf("%d%d%d", &n, &m, &p);
fact[] = ;
for (int i = ; i <= p; ++i)
fact[i] = fact[i - ] * i % p;
printf("%I64d\n", lucas(n + m, n, p)); }
return ;
}
hdu3037(lucas定理)的更多相关文章
- hdu3037 Lucas定理
Lucas定理 Lucas(n,m,p)=c(n%p,m%p)* Lucas(n/p,m/p,p),其中lucas(n,m,p)=C(n,m)%p (这里的除号是整除) 证明——百度百科 题意:求n个 ...
- HDU3037 Saving Beans(Lucas定理+乘法逆元)
题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...
- [HDU3037]Saving Beans,插板法+lucas定理
[基本解题思路] 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个“档板”插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号分到对应位置的几个元 ...
- HDU 3037(Lucas定理)
对于很大的组合数不能用C(n, m) = C(n - 1, m) + C(n-1, m -1)来求,这里就用到Lucas定理. 模板题: hdu3037:模板如下: #include <cstd ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- 大组合数:Lucas定理
最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
- 组合数取模Lucas定理及快速幂取模
组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1) , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...
- hdu 3037 Saving Beans Lucas定理
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- CImageList用法介绍
图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式.可以利用WINDOWS32位应用程序接口函数A ...
- perl lwp 获取请求头
<pre name="code" class="html">[root@dr-mysql01 ~]# cat getx.pl use LWP::Us ...
- [读书笔记]黑客与画家[Hackers.and.Painters]
(书生注:这本书写的不错.针对程序员,可以带来不同角度的想法,有助于反思自己的程序员工作.我甚至从中发现了自己爱用铅笔的原因... 尤其是其中关于黑客的定义,包括黑客认为的乐趣和目的,让人更深层次思 ...
- java(样品集成框架spring、spring mvc、spring data jpa、hibernate)
这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适sprin ...
- [Android]Button按下后修改背景图
Button按下后修改背景图 错误做法:为Button添加OnTouch事件监听,根据ACTION_UP和ACTION_DOWN动作来修改Button的背景图 错误原因:从理论上讲,按钮按下修改背景色 ...
- 14.4.1 InnoDB Startup Configuration
14.4 InnoDB Configuration :InnoDB 配置: 14.4 InnoDB Configuration 14.4.1 InnoDB Startup Configuration ...
- OCA读书笔记(15) - 执行数据库备份
物理备份 -- 数据文件,控制文件,日志文件,参数文件 数据库备份 冷备 -- 归档和非归档均可以 什么时候必须用冷备?1. 数据库的模式为非归档的2. 用于现场保护 冷备的过程:1. 首先查看备份文 ...
- 标准输入的原理:cin与scanf
1.cin 该方法 1)假设cin读取整数.会自己主动忽略换行和空格.遇到文件结束标记.cin >> a返回的数false int a; while(cin >&g ...
- Android的编译系统
一.Makefile的主要流程 以下主要流程都在build/core/main.mk里安排. l 初始化相关的参数设置(buildspec.mk.envsetup.mk.config.mk) ...
- OPEN-E安装中注意的问题
安装OPEN-E的时候,OPEN-E需要单独安装到存储硬盘外的硬盘上,否则是没有办法使用安装了OPEN-E的硬盘上的空间的. OPEN-E免费许可证的容量问题 安装OPEN-E后申请的试用key只能试 ...