Java教程

卢卡斯

本文主要是介绍卢卡斯,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

先给一份洛谷模板题的代码

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&-x
#define ll long long
#define pii pair<ll,ll>
#define dob double
#define For(i,s,n) for(ll i = s;i <= n;i++)
#define mem0(a) memset(a,0,sizeof a)
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) a/gcd(a,b)*b
const int N = 2e5+50;
const double eps = 1e-6;
const ll mod =  998244353;
ll p;
ll fac[N];
ll f_pow(ll a,ll b){
    ll res = 1;
    while(b){
        if(b&1) res = res%p*a%p%p;
        a = a%p*a%p%p;
        b>>=1;
    }
    return res;
}
void init(){
    fac[0] = 1;
    for(ll i = 1;i <= p;i++)fac[i] = fac[i-1]*i%p;
}
ll C(ll n,ll m){
    if(m > n) return 0;
    return fac[n]*f_pow(fac[m],p-2)%p*f_pow(fac[n-m],p-2)%p;
}
ll Lucas(ll n,ll m){
    if(m == 0) return 1;
    return Lucas(n/p,m/p)*C(n%p,m%p)%p;
}
int main(){
    //ios::sync_with_stdio(false);
    ll t;cin>>t;
    while(t--){
        ll n,m;
        cin>>n>>m>>p;
        init();
        cout<<Lucas(n+m,n)<<endl;
    }
    return 0;
}
这篇关于卢卡斯的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!