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