版权声明:本文为博主原创文章,未经博主允许必须转载。 https://blog.csdn.net/qq_35950004/article/details/86105927
大佬太强了
五边形数定理的实质就是
欧拉函数
Φ(C++应该对希腊字母也有大小写区分吧)
Φ(x)=i=1∏∞(1−xi)
然后通过这个函数的意义:包含偶数个不相等的整数的k的整数拆分-包含奇数个不相等的k的整数拆分。
然后用数形结合发现只有和形如(广义)五边形数(
2n(3n−1),n∈ Z)的k会有值。
然后因为
n以内广义五边形数是
O(n
)的数量级的。
所以可以在
O(n
)的复杂度内算出
Φ(modx)n
对于可相同整数拆分
P(n),生成函数是
F(x)=∑i=1P(i)xi=∏i=1∞(1+xi+x2i+...)=∏i=1n1−xi1
所以
F(x)Φ(x)=1
发现
Φ(x)只有
O(n
)项,可以
O(nn
)递推解
F(x)[xn]
当然你也可以多项式求逆(我怎么不觉得这个多项式求逆会快一些呢?如果你递推时循环展开应该可以D爆多项式求逆吧)。
可以多组数据。
所以五边形数其实就是人们想求
F(x)1时发现这玩意就是五边形数。