【模板】Lucas定理

#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
long long N,M,p;
using namespace std;
long long KSM(long long a,long long b,long long p) {
    long long ans=1;
    while(b) {
        if(b&1)ans=(ans*a)%p;
        a=(a*a)%p;
        b/=2;
    }
    return ans;
}
long long C(long long a,long long b) {
    if(a<b)return 0;
    if(a==b)return 1;
    if(b>a-b)b=a-b;
    long long A=1,B=1;
    for(long long i=0; i<b; ++i) {
        A=(A*(a-i))%p;
        B=(B*(b-i))%p;
    }
    return (A*KSM(B,p-2,p));
}
long long Lucas(long long n,long long m) {
    if(m==0)return 1;
    return C(n%p,m%p)*Lucas(n/p,m/p)%p;
}
int main() {
    //freopen(" .in","r",stdin);
    //freopen(" .out","w",stdout);
    cin>>N>>M>>p;
    cout<<Lucas(N+M,M);
}
posted @   changwenxuan  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示