模板 lucas
void extend_gcd(ll a,ll &x,ll b,ll &y){
if(b==){
x=,y=;
return;
}
ll x1,y1;
extend_gcd(b,x1,a%b,y1);
x=y1;
y=x1-(a/b)*y1;
}
ll inv(ll a,ll m){
ll t1,t2;
extend_gcd(a,t1,m,t2);
return ( t1%m + m ) % m;
}
ll qpow(ll x,ll y,ll m){
if(!y) return ;
ll ans=qpow(x,y>>,m);
ans= ans *ans %m;
if(y&) ans=ans *x %m;
return ans;
}
ll nump(ll x,ll p){
ll ans=;
while(x) ans += x/p, x /= p;
return ans;
}
ll fac(ll n,ll p,ll pk){
if(n==) return ;
ll ans=;
for(ll i=;i<=pk;i++){
if(i%p==) continue;
ans= ans *i %pk;
}
ans = qpow(ans,n/pk,pk);
ll to=n%pk;
for(ll i=;i<=to;i++){
if(i%p==) continue;
ans = ans *i %pk;
}
return fac(n/p,p,pk) *ans %pk;
}
ll cal(ll n,ll m,ll p,ll pi,ll pk){
ll a=fac(n,pi,pk),b=fac(m,pi,pk),c=fac(n-m,pi,pk);
ll d=nump(n,pi)-nump(m,pi)-nump(n-m,pi);
ll ans= a %pk * inv(b,pk) %pk * inv(c,pk) %pk * qpow(pi,d,pk) %pk;
return ans * (p/pk) %p * inv(p/pk,pk) %p;
}
ll nCmmodp(ll n,ll m,ll p){
if(n<m) return ;
ll ans=;
ll x=p;
for(ll i=;i*i<=x&&x>;i++){
ll k=,pk=;
while(x%i==){
x /= i;
k++;
pk *= i;
}
if(k>){
ans =( ans + cal(n,m,p,i,pk) )%p;
}
}
if(x>) ans=( ans + cal(n,m,p,x,x) )%p;
return ans;
}
模板 lucas的更多相关文章
- 组合数模板 - Lucas
2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- xdoj-1057(Lucas定理的证明及其模板)
Lucas定理的证明: 转自百度百科(感觉写的还不错) 首先你需要这个算式: ,其中f > 0&& f < p,然后 (1 + x) nΞ(1 + x) sp+q Ξ ...
- 模板—数学—Lucas
模板—数学—Lucas Code: #include <cstdio> #include <algorithm> using namespace std; #define N ...
- Lucas定理模板【bzoj2982】【combination】
(上不了p站我要死了,侵权度娘背锅) Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ ...
- 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数
typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...
- 【组合数+Lucas定理模板】HDU 3037 Saving
acm.hdu.edu.cn/showproblem.php?pid=3037 [题意] m个松果,n棵树 求把最多m个松果分配到最多n棵树的方案数 方案数有可能很大,模素数p 1 <= n, ...
- BZOJ 4403 2982 Lucas定理模板
思路: Lucas定理的模板题.. 4403 //By SiriusRen #include <cstdio> using namespace std; ; #define int lon ...
- BZOJ2982: combination Lucas模板
2982: combination Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 734 Solved: 437[Submit][Status][Di ...
随机推荐
- IE中Ajax数据缓存的问题
在IE中,Ajax回来的数据会有缓存的现象发生,解决方式: 1,改变URL,每次请求加一个随机数参数Math.random()或者new Date().getTime(),这样IE会认为URL不一样, ...
- Shell Script Tutorials (0 ~ 62)
Tutorial-1: Introduction Tutorial-2: Shell, Kernel, Terminal & More Tutorial-3: View System Date ...
- HDU 5280 Senior's Array (暴力,水)
题意:给一个数列,再给一个数字p,要求p一定要替换掉数列中的一个元素,然后求最大连续子序列之和. 思路:1000*1000的复杂度,O(n*n) .就是每个都试,然后求和. #include < ...
- oracle静态与动态监听
在运行lsnrctl命令的status时,常会看到如下返回值: 服务“test”包含1个例程. 例程"mydata",状态 UNKOWN,包含此服务的一个处理程序... 服务 ...
- NET下RabbitMQ实践[实战篇]
之前的文章中,介绍了如何将RabbitMQ以WCF方式进行发布.今天就介绍一下我们产品中如何使用RabbitMQ的! 在Discuz!NT企业版中,提供了对HTTP错误日志的记录功能 ...
- jQuery之属性过滤选择器
转自:http://blog.csdn.net/woshisap/article/details/7341136 在HTML文档中,元素的开始标记中通常包含有多个属性(attribute), 在jQu ...
- Kettle简介
ETL和Kettle简介 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.它是构建数据仓库的重要环节.数据仓库是面向主题的.集成的.稳定的且随时间不断变 ...
- HDU 5607 graph 矩阵快速幂 + 快速幂
这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...
- lightoj 1020 (博弈)
思路:很简单的博弈,找出每个人先拿的必胜态进行状态转移即可. #include<cstdio> #include<string> #include<cstring> ...
- 如何添加网站for Linux(绑定域名)
[以下配置的路径以阿里云提供的标准环境路径为准,如果您另行安装,请根据实际安装路径配置]. 1.cd /alidata/server/httpd/conf/vhosts/ 进入绑定域名所在目录, ...