牛顿迭代求解方程.
令 $k=\lfloor n^a+n^b\rfloor,f(x)=x^a+x^b$ ,那么就是要求解 $f(n_0)=k$ 与 $f(n_1)=k+1$ 两个方程.
直接二分精度不够,利用牛顿迭代,这两个根都在 $n$ 附近,取 $x_0=n$ ,迭代一次精度即可达到要求.
发现常数比较大,跑不过去,其实并不需要把这两个根分别求出来,只需要求得两根之差,加入贡献即可.
$$
\begin{aligned}
n_0&=n-\frac{f(n)-k}{f’(n)} \\
n_1&=n-\frac{f(n)-k-1}{f’(n)} \\
n_1-n_0&=\frac {1} {f’(n)}=\frac {1} {an^{a-1}+bn^{b-1}}
\end{aligned}
$$
发现这个贡献与 $k$ 无关,于是每次询问可以少调用 $4$ 次 $pow$ 函数.
1 |
|