ルーカスの定理による二項係数

概要

ルーカスの定理によって二項係数を素数$P$で割った余りを計算する.

計算量

前計算$O(P^2)$,二項係数計算に$O(\log P) $

ソースコード

template<int MOD> struct Lucas{
    Pascal pas{MOD};
    Lucas(){
    }
    Fp<MOD> com(long a,long b){
        if(a<b)return 0;
        Fp<MOD> ret{1};
        while(a>0){
            ret *=pas.com(a%MOD,b%MOD);
            a/=MOD;
            b/=MOD;
        }
        return ret;
    }
};