五边形数
五边形数定理
公式:
∞∏n=1(1−xn)=∞∑k=−∞(−1)kxk(3k−1)/2=1+∞∑k=1(−1)k(xk(3k+1)/2+xk(3k−1)/2)问题1:要求计算∑ni=1i⋅ci=n中,0≤c1,…,cn,有多少种c1,…,cn的赋值方案
可以用生成函数求解,我们要求的是f(x)的xn项的系数:
f(x)=n∏i=1(1+xi+x2i+…)(modxn+1)=n∏i=111−xi(modxn+1)可以发现:
1f(x)(modxn+1)=n∏i=1(1−xi)(modxn+1)=∞∏i=1(1−xi)(modxn+1)这里我们可以利用五边形定理快速求出1f(x)(modxn+1),之后求逆即可。
时间复杂度为O(nlog2n)。
问题2:要求计算∑ni=1i⋅ci=k中,0≤ci≤ai,有多少种c1,…,cn的赋值方案分别满足k=1,2,…,n。输入满足0≤a1<a2<…<an,其中n≤105。
可以用生成函数求解,我们要求的是f(x):
f(x)=n∏i=1(1+xi+x2i+…+xai⋅i)(modxn+1)=n∏i=11−x(ai+1)⋅i1−xi(modxn+1)由于0≤a1<…<ai,因此有ai+1≥i,故(ai+1)⋅i≥i2。因此(1−x(ai+1)⋅i)中最多√n项不为1。因此分子部分的乘积和,我们可以O(n√n)计算出来。
分母部分就是一个典型的五边形定理的应用了。求出来后分子乘上分母的逆多项式即可得到结果。
提供一道题目。