#G2009. 最近的平方数

    ID: 1055 传统题 1000ms 512MiB 尝试: 2 已通过: 2 难度: 普及− 上传者: 标签>GESP二级数学库函数类型转换2026模拟

最近的平方数

题目描述

小明在操场上铺正方形的地垫,地垫的块数只能是完全平方数(1,4,9,16,25,…1, 4, 9, 16, 25, \dots),这样才能拼成一个大正方形。

老师给出了 nn 个数,对于每个数 xx,请你找出与 xx 最接近的完全平方数,也就是使 ∣k2−x∣|k^2 - x| 最小的那个 k2k^2(kk 是正整数)。

可以证明,不会出现两个完全平方数与 xx 一样接近的情况。

输入格式

第一行一个整数 nn。

第二行 nn 个正整数 x1,x2,…,xnx_1, x_2, \dots, x_n。

输出格式

输出 nn 行,第 ii 行一个整数,表示与 xix_i 最接近的完全平方数。

样例 #1

样例输入 #1

5
10 1 13 50 99

样例输出 #1

9
1
16
49
100

样例解释

  • 1010 与 99 相差 11,与 1616 相差 66,所以答案是 99;
  • 11 本身就是完全平方数;
  • 1313 与 99 相差 44,与 1616 相差 33,所以答案是 1616;
  • 5050 最接近 4949,9999 最接近 100100。

提示

数据范围

  • 对于 30%30\% 的数据:xi≤104x_i \le 10^4;
  • 对于 60%60\% 的数据:xi≤109x_i \le 10^9;
  • 对于 100%100\% 的数据:1≤n≤1051 \le n \le 10^5,1≤xi≤10181 \le x_i \le 10^{18}。

提示

  • xix_i 最大到 101810^{18},要用 long long 存储;一个一个地试 kk 太慢了。
  • 可以用 sqrt 先算出 x\sqrt{x} 的大概值,但 sqrt 的结果是浮点数,数很大时可能有一点误差。转成整数 rr 以后,最好再用 while 检查一下:保证 r2≤x<(r+1)2r^2 \le x < (r+1)^2。
  • 答案一定是 r2r^2 和 (r+1)2(r+1)^2 中的一个。