P3807 【模板】卢卡斯定理/Lucas 定理
题面
给定整数 的值,求出 的值。
输入数据保证 为质数。
注: 表示组合数。
对于 的数据,。
思路
Lucas定理模版题。数字大的用Lucas分解,数字小的直接算。
C(n,m) mod p=C(n%p,m%p) * C(n/p,m/p) mod p
除法用逆元。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int fact[100005];
int data[1000005];
int n,m,p;
int lucas(int a,int b){
if(a<b){
return 0;
}
if(a<p){
return fact[a]*data[b]*data[a-b]%p;
}
return lucas(a/p,b/p)*lucas(a%p,b%p)%p;
}
int solve(){
cin>>n>>m>>p;
n+=m;
data[0]=data[1]=fact[0]=fact[1]=1;
for(int i=2;i<=n;i++){
fact[i]=fact[i-1]*i%p;
data[i]=(p-p/i)*data[p%i]%p;
}
for(int i=2;i<=n;i++){ // 无法理解的代码开始了
data[i]=data[i-1]*data[i]%p;
}
return lucas(n,m);
}
signed main(){
int t;
cin>>t;
while(t--){
cout<<solve()<<'\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!