我们实际上求的是这玩意
T(n)=n+∑i=1n(T(i)+T(ni))T(n)=\sqrt{n}+\sum_{i=1}^{\sqrt{n}}(T(i)+T(\frac{n}{i}))T(n)=n+i=1∑n(T(i)+T(in))
我们只需要考虑
T(n)=n+∑i=1n(i+ni)T(n)=\sqrt{n}+\sum_{i=1}^{\sqrt{n}}(\sqrt i+\sqrt\frac{n}{i})T(n)=n+i=1∑n(i+in)
对于之后的项,如
T(n)=n14+∑i=1n14(i+ni)T(\sqrt n)=n^{1\over4}+\sum_{i=1}^{n^{1\over4}}(\sqrt i+\sqrt\frac{\sqrt n}{i})T(n)=n41+i=1∑n41(i+in)
只有O(n14)O(n^{1\over4})O(n41),n\sqrt{n}n个加起来也就O(n34)O(n^{3\over4})O(n43)
我们要求的实际上是
∑i=1n(i+ni)\sum_{i=1}^{\sqrt{n}}(\sqrt i+\sqrt\frac{n}{i})i=1∑n(i+in)
前者明显小于后者,可以忽略
∑i=1nni\sum_{i=1}^{\sqrt{n}}\sqrt\frac{n}{i}i=1∑nin
当积分算
∫0nnx\int_{0}^{\sqrt{n}}\sqrt\frac{n}{x}∫0nxn
为了方便后面叙述,我们设一个通式,即
S(m)=∫0mnxS(m)=\int_{0}^{m}\sqrt\frac{n}{x}S(m)=∫0mxn
设g(x)=nxg(x)=\sqrt\frac{n}{x}g(x)=xn
运用你丰富的数学知识,得到原函数
f(x)=nxf(x)=\sqrt{nx}f(x)=nx
所以所求为
S(n)=f(n)=n34S(\sqrt n)=f(\sqrt n)=n^{3 \over 4}S(n)=f(n)=n43
如果我们预处理出前kkk个(假装k>nk>\sqrt nk>n),复杂度为
∑i=1nkni=S(nk)\sum_{i=1}^{\frac{n}{k}}\sqrt\frac{n}{i}=S(\frac{n}{k})i=1∑knin=S(kn)
代入上面的结论
S(nk)=f(nk)=nkS(\frac{n}{k})=f(\frac{n}{k})=\frac{n}{\sqrt{k}}S(kn)=f(kn)=kn
加上预处理后总复杂度O(k+nk)O(k+\frac{n}{\sqrt{k}})O(k+kn)
当k=n23k=n^{2 \over3}k=n32时有理论最优复杂度O(n23)O(n^{2\over3})O(n32)