Lucas定理 样例通过 全WA求助
查看原帖
Lucas定理 样例通过 全WA求助
358283
Crab_time楼主2023/2/28 19:32

直接用定理的公式计算

代码:

#include<iostream>
using namespace std;

#define fle(i,a,b) for(int i = a;i<=(b);i++)
#define ll long long

ll C(ll n,ll m,ll p){
    if(m > n){return 0;}
    ll ans = 1;
    fle(i,1,n){
        ans = ans * i;
    }
    fle(i,1,m){
        ans /= i;
    }
    fle(i,1,n-m){
        ans /= i;
    }
    return ans;
}

ll lucas(ll n,ll m,ll p){
    if(m == 0){return 1;}
    return (C(n%p,m%p,p) * lucas(n/p,m/p,p)) % p;
}

int main()
{
    ll t;
    cin >> t;
    while(t--){
        ll n,m,p;
        cin >> n >> m >> p;
        cout << lucas(n+m,m,p) << endl;
    }
    return 0;
}
2023/2/28 19:32
加载中...