组合数板板
inline int modpow(int x,int y,int mod)//逆元
{
int re=1;x%=mod;
while(y)
{
if(y&1) re=re*x%mod;
x=x*x%mod,y>>=1;
}
return re%mod;
}
inline void preC(int nn,int mod)//PRE
{
fac[0]=inv[0]=1;
for(int i=1;i<=nn;i=-~i) fac[i]=fac[i-1]*i%mod;
inv[nn]=modpow(fac[nn],mod-2,mod);
for(int i=nn;i>=2;i=~-i) inv[i-1]=inv[i]*i%mod;
}
inline int C(int n,int m,int mod)//组合数
{
if(!m||n==m) return 1;if(n<m) return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int modC(int n,int m,int mod)//卢卡斯
{
if(!m||n==m) return 1;if(n<m) return 0;
return C(n%mod,m%mod,mod)%mod*modC(n/mod,m/mod,mod)%mod;
}
\[or
\]
inline int modpow(int x,int y)
{
int re=1;x%=mod;
while(y)
{
if(y&1) re=re*x%mod;
x=x*x%mod,y>>=1;
}
return re%mod;
}
inline void preC(int nn)
{
fac[0]=inv[0]=1;
fd(i,1,nn) fac[i]=fac[i-1]*i%mod;
inv[nn]=modpow(fac[nn],mod-2);
bd(i,nn,2) inv[i-1]=inv[i]*i%mod;
}
inline int C(int n,int m)
{
if(!m||n==m) return 1;if(n<m) return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int modC(int n,int m)
{
if(!m||n==m) return 1;if(n<m) return 0;
return C(n%mod,m%mod)%mod*modC(n/mod,m/mod)%mod;
}
本文来自博客园,作者:whrwlx,转载请注明原文链接:https://www.cnblogs.com/whrwlx/p/18380440
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!