博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3037 Saving Beans lucas定理
阅读量:5123 次
发布时间:2019-06-13

本文共 1284 字,大约阅读时间需要 4 分钟。

给n, m, p, 求sigma(i = 0 to m) C(n-1+i, n-1)%p的值。

C(n-1, n-1)+C(n-1+1, n-1)+C(n-1+2, n-1)+.......

= C(n-1, 0)+C(n, 1)+C(n+1, 2)+....

= C(n, 0)+C(n, 1)+C(n+1, 2)+....

根据C(n, k) = C(n-1, k-1)+C(n-1, k)  可以推出来上面的式子最终合并为C(n+m, m)%p。

这个式子直接用lucas定理就可以了。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define pb(x) push_back(x)#define ll long long#define mk(x, y) make_pair(x, y)#define lson l, m, rt<<1#define mem(a) memset(a, 0, sizeof(a))#define rson m+1, r, rt<<1|1#define mem1(a) memset(a, -1, sizeof(a))#define mem2(a) memset(a, 0x3f, sizeof(a))#define rep(i, n, a) for(int i = a; i
pll;const double PI = acos(-1.0);const double eps = 1e-8;ll mod;const int inf = 1061109567;const int dir[][2] = { {-1, 0}, { 1, 0}, { 0, -1}, { 0, 1} };ll pow(ll a, ll b) { ll ret = 1; while(b) { if(b&1) { ret = ret*a%mod; } a = a*a%mod; b >>= 1; } return ret;}ll C(ll n, ll k) { if(n
n-k) k = n-k; ll s1 = 1, s2 = 1; for(int i = 0; i
>t; while(t--) { scanf("%I64d%I64d%I64d", &n, &m, &mod); ll ans = lucas(n+m, m); printf("%I64d\n", ans); } return 0;}

 

转载于:https://www.cnblogs.com/yohaha/p/5214669.html

你可能感兴趣的文章
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
引用 移植Linux到s3c2410上
查看>>
MySQL5.7开多实例指导
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
poj1201 查分约束系统
查看>>
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
安装 Express
查看>>