1、当 n,m≤1000,p 为任意数时
可以使用暴力(O(n2))求解 杨辉三角 的方式,计算
(nm)=(n−1m−1)⋅(n−1m)
2、当 n,m≤106,p≈109 且 p 为素数时
利用公式
(nm)=n!m!(n−m)!modp
O(n) 预处理阶乘,然后求逆元。
3、当 n≤106,m≤1000,p 为任意数时
(nm)=n!m!(n−m)!=n×(n−1)×…(n−m+1)1×2×3×⋯×m
因为组合数一定为整数,然后可以尝试约分,得到
(nm)=x1×x2×x3×⋯×xm
4、当 n,m≤109,p≤1000 且 p 为素数时
因为 p 的范围较小,且 p 为素数,考虑 Lucas定理 求解,
(nm)modp=(⌊n/p⌋⌊m/p⌋)⋅(nmodpmmodp)modp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】