卢卡斯定理

Posted kasenbob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卢卡斯定理相关的知识,希望对你有一定的参考价值。

(说实话推断过程不是我这种弱鸡能看懂的,直接上结论。。。)

卢卡斯定理:

C(n, m) % p = (C(n/p, m/p) % p) * (C(n%p, m%p) % p) % p

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long u64;

const int maxn = 100000 + 10;
u64 n, m, p, fac[maxn];

inline u64 Fast_Pow(u64 x, u64 k) {
    u64 ans = 1;
    while(k) {
        if( k&1 ) ans = ans * x % p;
        k >>= 1, x = x * x % p;
    }
    return ans;
}

u64 C(u64 k, u64 b) {
    if( k<b )  return 0;
    return fac[k] * Fast_Pow(fac[b] % p, p-2) % p * Fast_Pow(fac[k-b] % p, p-2) % p;
}

u64 Lucas(u64 k, u64 b) {
    if( !b )  return 1;
    return C(k%p, b%p) * Lucas(k/p, b/p) % p;
}

int main(int argc, char const *argv[])
{
    int t;  scanf("%d", &t);
    while( t-- ) {
        fac[0] = 1;
        scanf("%lld%lld%lld", &n, &m, &p);
        for(int i=1; i<=p; ++i)
            fac[i] = fac[i-1] * i % p;
        printf("%lld
", Lucas(n+m, m));
    }
    return 0;
}

 

以上是关于卢卡斯定理的主要内容,如果未能解决你的问题,请参考以下文章

「闲话随笔」卢卡斯定理证明

浅谈Lucas定理(卢卡斯定理)

《夜深人静写算法》数论篇 - (22) 卢卡斯定理

浅谈卢卡斯定理

bzoj 1951: [Sdoi2010]古代猪文 中国剩余定理+欧拉定理+组合数学+卢卡斯定理

夜深人静写算法(三十九)- 卢卡斯定理