1. 程式人生 > >51nod 1778 小Q的集合 lucas定理+線性篩+數學

51nod 1778 小Q的集合 lucas定理+線性篩+數學

題意

小Q有一個集合S,它的元素個數|S|=n
對於S的任意一個子集合T,定義f(T)=|T|k,定義T關於S的補集為ST
小Q想知道,如果他等概率地選擇一個S的子集T,那麼f(T)f(ST)的方差是多少。
由於這個方差值可能很大,不妨設其為v,你只需要給出(v2n)modm的值即可。
kn10106,1<=k<=106,m,2<=m<=106

分析

注意到

f(T)f(ST)的平均數是0,那麼我們要求的其實就是

i=0nCni(ik(ni)k)2
因為根據lucas定理有Cnimodm=Cn/mi/mCnmodmimodmmodm所以我們只用考慮所有滿足imodm<=nmodmi即可。
然後就開始推式子:
ans=i=0nmj=0nmodmCnim+j((im+j)k(nimj)k)2