摘自队友devil的lucas模板

typedef long long LL;
const int MOD=1e9+7;
LL quick_mod(LL a,LL b)
{
LL ans=1;
a%=MOD;
while(b)
{
if(b&1)
{
ans=ans*a%MOD;
b--;
}
b>>=1;
a=a*a%MOD;
}
return ans;
}
LL C(LL n,LL m)
{
if(m>n) return 0;
LL ans=1;
for(int i=1; i<=m; i++)
{
LL a=(n+i-m)%MOD;
LL b=i%MOD;
ans=ans*(a*quick_mod(b,MOD-2)%MOD)%MOD;
}
return ans;
}
LL Lucas(LL n,LL m)
{
if(m==0) return 1;
return C(n%MOD,m%MOD)*Lucas(n/MOD,m/MOD)%MOD;
}

时间: 2024-08-30 12:46:28

摘自队友devil的lucas模板的相关文章

Linux开源模块移植概述暨交叉编译跨平台移植总结--摘自《嵌入式Linux驱动模板精讲与项目实践》

本文摘自<嵌入式Linux驱动模板精讲与项目实践>一书中的"开发与调试技巧". Linux的强大威力就在于有很多开源项目可以使用,通常很多需求可以通过寻找相关的开源模块做为快速解决方案.要把这些开源模块应用到嵌入式中,其中一个关键点就是要使用交叉编译工具对开源项目进行交叉编译. 根据具体情况,下载的开源项目在组织上有很多情况,在此对各种情况进行归类介绍. 1. 下载的开源软件包找不到Makefile 对于这种开源包通常是采用configure的方式组织的,那么第一步就是使用

linux驱动开发重点关注内容--摘自《嵌入式Linux驱动模板精讲与项目实践》

本文摘自本人拙著 <嵌入式Linux驱动模板精讲与项目实践> 初步看起来Linux设备驱动开发涉及内容非常多,而须要实现驱动的设备千差万别.事实上做一段时间驱动之后回首看来主要就是下面几点: (1)对驱动进行分类.先归纳为哪个类型的驱动.归类正确再利用内核提供的子系统进行开发,往往会发现事实上非常多通用的事情内核已经帮我们做了,一个优秀的驱动project师应该最大程度上利用内核的资源.内核已经实现的毕竟稳定性强.可移植性高. (2)找到内核的提供的子系统.接下来就是要制作该子系统对该类设备提

lucas模板

1 ll PowMod(ll a,ll b,ll MOD){ 2 ll ret=1; 3 while(b){ 4 if(b&1) ret=(ret*a)%MOD; 5 a=(a*a)%MOD; 6 b>>=1; 7 } 8 return ret; 9 } 10 ll fac[110219]; 11 ll Get_Fact(ll p) 12 { 13 fac[0]=1; 14 for(int i=1;i<=p;i++) 15 fac[i]=(fac[i-1]*i)%p; 16 }

【lucas模板】

求(P是质数)\[C_n^m\% p\] 这个就是卢卡斯定理!! 它的精华就是\[C(n,m,p) \equiv C(n/p,m/p,p)*C(n\% p,m\% p,p)(\% p)\] 然后呢就是一个开心的递归处理, 如果$n < p$就就算一下,逆元阶乘都很easy 上代码! 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 typedef long long lt; 5 lt n,m,p

1067 - Combinations---LightOj(Lucas求组合数)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1067 模板求C(n,m)%p, Lucas模板; #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #include <map>

HDU 3037 Saving Beans

/* hdu3037 http://acm.hdu.edu.cn/showproblem.php?pid=3037 lucas 模板题 */ #include <cstdio> #include <cmath> const long long Nmax=100005; long long p; long long ex_gcd(long long a,long long b,long long &x,long long &y)//solve x,y in a*x+b

2014广东省省赛总结

广东省之行就这样结束了.虽然,比赛结果没有达到自己的预想结果.但是获得的收获却超过了自己的想象,终于明白了什么叫身体或者灵魂必须一个在路上.广东赛前一直认为自己还可以,认为自己去至少去可以去多个银牌吧.因为自己在大一自己省都拿了个银牌,而且自己在大二也在重新学了那么多的知识,所以我这么认为也是基于一定的参考基础的,但是没想到河南省是如此的弱.以至于我跟我队在广东省赛热身赛时候居然出现了抱0的悲剧结果. 说一说正式赛吧.一开始的A题,是一道签到题.因为我们队开始配合没多久,所以比赛开始时候我占着键

【hdu 3037】Saving Beans

Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2578    Accepted Submission(s): 956 Problem Description Although winter is far away, squirrels have to work day and night to save be

BZOJ 4403 2982 Lucas定理模板

思路: Lucas定理的模板题.. 4403 //By SiriusRen #include <cstdio> using namespace std; const int mod=1000003; #define int long long int cases,N,L,R,fac[mod],inv[mod]; int C(int n,int m){ if(n<m)return 0; if(n<mod&&m<mod)return fac[n]*inv[n-m]