注意到 a+b=(a+b)2=a2+2ab+b2a+b=\sqrt{(a+b)^2}=\sqrt{a^2+2ab+b^2}a+b=(a+b)2 =a2+2ab+b2 。
我们使用累加方法求出 a2,2ab,b2a^2,2ab,b^2a2,2ab,b2,然后再将他它们一个一个加起来,注意到这个式子一定是整数,通过试根号来得出。
如何试根号:
将 iii 从 111 枚举到 ∞\infty∞,判断 i2i^2i2 是否等于 a2+2ab+b2a^2+2ab+b^2a2+2ab+b2 即可。
但是如果这样配上累加算乘法的话太慢了,时间复杂度是 O(n3)O(n^3)O(n3) 的,需要优化。
注意到 i2=(i−1)2+2×i−1i^2= (i-1)^2+2\times i-1i2=(i−1)2+2×i−1。所以我们可以递推 O(n2)O(n^2)O(n2) 求出。
这样就可以以 O(n2)O(n^2)O(n2) 的复杂度完美地解决这个问题了。
在具体实现时记得开 long long。
附上代码:
该代码在递推计算 i2i^2i2 时使用了滚动数组的方法,大家可以学习一下。