卢卡斯定理
Lucas定理是用于处理组合数取模的定理,通常用于解决阶乘无法解决的问题。
本质上来说,卢卡斯定理是一类处理当组合数
当
首先给出卢卡斯定理
证明
设
首先,由费马小定理得,对于任意整数:
观察
故可以推出
证毕。
inline int qpow(int a,int b){
int res=1;
while(b){
if(b&1){
res*=a,res%=p;
}
a*=a,a%=p;
b>>=1;
}
return res;
}
inline int C(int n,int m){
if(n < m) return 0;
if(m > n - m) m = n - m;
int a = 1 , b = 1;
for(int i=0;i<m;i++){
a = (a * (n - i)) % p;
b = (b * (i + 1)) % p;
}
return a * qpow(b,p-2) % p;
}
inline int Lucas(int n,int m){
if(m == 0) return 1;
return Lucas(n/p,m/p) * C(n % p , m % p) % p;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探