卢卡斯定理(解决大组合数)

组合数1

现在来了新问题,如果n和m很大呢,

比如求C(n, m) % p  , n<=1e18,m<=1e18,p<=1e5

看到没有,n和m这么大,但是p却很小,我们要利用这个p

上帝说要有光,于是便有了光。

卢卡斯说要有

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

于是便有了大组合数有解。

代码如下:

LL Lucas(LL n, LL m, int p){
    return m ? Lucas(n/p, m/p, p) * comb(n%p, m%p, p) % p : 1;
}

猜你喜欢

转载自blog.csdn.net/qq_38367681/article/details/81456697