五边形数

Published: by Creative Commons Licence

  • Tags:

五边形数定理

公式:

n=1(1xn)=k=(1)kxk(3k1)/2=1+k=1(1)k(xk(3k+1)/2+xk(3k1)/2)

问题1:要求计算ni=1ici=n中,0c1,,cn,有多少种c1,,cn的赋值方案

可以用生成函数求解,我们要求的是f(x)xn项的系数:

f(x)=ni=1(1+xi+x2i+)(modxn+1)=ni=111xi(modxn+1)

可以发现:

1f(x)(modxn+1)=ni=1(1xi)(modxn+1)=i=1(1xi)(modxn+1)

这里我们可以利用五边形定理快速求出1f(x)(modxn+1),之后求逆即可。

时间复杂度为O(nlog2n)

问题2:要求计算ni=1ici=k中,0ciai,有多少种c1,,cn的赋值方案分别满足k=1,2,,n。输入满足0a1<a2<<an,其中n105

可以用生成函数求解,我们要求的是f(x)

f(x)=ni=1(1+xi+x2i++xaii)(modxn+1)=ni=11x(ai+1)i1xi(modxn+1)

由于0a1<<ai,因此有ai+1i,故(ai+1)ii2。因此(1x(ai+1)i)中最多n项不为1。因此分子部分的乘积和,我们可以O(nn)计算出来。

分母部分就是一个典型的五边形定理的应用了。求出来后分子乘上分母的逆多项式即可得到结果。

提供一道题目