题解 P11496
题目:P11496 [ROIR 2019 Day 1] 完全平方
题意
给出一个整数 $k$ ,寻找 $i, j \in \mathbb{N}$ 使得 $k+i^2=j^2$ ,求 $j$ 的最小值。若没有满足的取值,则输出 none
。
思路
对于 $k=0$ 的情况,原方程可化为 $i^2=j^2$ ,当 $i=0$ 时 $j$ 取得最小值 $0$ 。
对于 $k \neq 0$ 的情况,我们可以把原方程整理如下:
$$k=j^2-i^2$$
$$k=(j+i)(j-i)$$
令 $p=i+j$ , $q=j-i$ ,那么 $ i=\frac{p-q}{2}$ ,$ j=\frac{p+q}{2}$ 。
我们可以从 $1$ 到 $\sqrt{|k|}$ 的范围内遍历 $k$ 的所有因数,判断此时分解出来的因数 $p,q$ 是否能化为 $k=pq=(j+i)(j-i)$ 的形式,如果可以的话就更新 $j$ 的最小值,且这个方法正负数同理。
时间复杂度 $\text{O}(\sqrt{|k|})$ 。
代码
1 |
|
闲话
想了很久怎么快速的分解因数,没想到 $\text{O}(\sqrt{|k|}) (-10^{12} \le k \le 10^{12})$ 这样就能过了……
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 House Tsumugi!
评论