盧卡斯定理
阿新 • • 發佈:2020-09-16
盧卡斯定理
\[\large\binom{n}{m}\equiv\binom{n \bmod p}{m\bmod p}\binom{\frac{n}{p}}{\frac{m}{p}} \pmod{p} \]
其中 \(p\) 為質數。
即將 \(n,m\) 用 \(p\) 進位制來表示。
擴充套件盧卡斯定理
考慮當 \(p\) 不為質數時要如何解決。
設 \(p=\prod p_i^{k_i}\),得:
\[\large\begin{cases} x\equiv \binom{n}{m} &\pmod{p_1^{k_1}} \\ x\equiv \binom{n}{m} &\pmod{p_2^{k_2}} \\ &\cdots \\ x\equiv \binom{n}{m} &\pmod{p_m^{k_m}} \\ \end{cases} \]
求值後用中國剩餘定理合併即可。
ll fac(ll x,ll p,ll k) { if(!x) return 1; ll ans=1; for(ll i=1;i<=k;++i) if(i%p) ans=ans*i%k; ans=qp(ans,x/k,k); for(ll i=1;i<=x%k;++i) if(i%p) ans=ans*i%k; return ans*fac(x/p,p,k)%k; } ll C(ll n,ll m,ll p,ll k) { ll sum=0; for(ll i=n;i;i=i/p) sum+=i/p; for(ll i=m;i;i=i/p) sum-=i/p; for(ll i=n-m;i;i=i/p) sum-=i/p; return fac(n,p,k)*qp(p,sum,k)%k*inv(fac(m,p,k),k)%k*inv(fac(n-m,p,k),k)%k; } ll crt(ll x,ll M,ll p) { return x*inv(M/p,p)*(M/p); } ll exlucas(ll n,ll m,ll p) { ll t=p,ans=0; for(ll i=2;i*i<=p;++i) { ll k=1; while(t%i==0) t/=i,k*=i; ans=(ans+crt(C(n,m,i,k),p,k))%p; } if(t>1) ans=(ans+crt(C(n,m,t,t),p,t))%p; return ans; }