2763: T2 徐老师的正方形拼图

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:10 解决:1

题目描述

徐老师有大大小小的正方形木板许许多多块,这些正方形木板的边长至少为$1$(当然也可能更大),且都是整数。徐老师想选择其中$n$块个正方形木板拼成(注意是拼成,不是叠加或者挖洞嵌进去)一个大的正方形。请帮徐老师求这个大正方形**边长**的最小值。

输入

本题每个测试点包含多组($\le10^6$)数据。

每行一个不超过($\le10^6$)的正整数n,表示使用的正方形数量。

输出

每行输出一个拼接后的大正方形**边长**的最小值(无解输出$-1$)。

样例输入 复制

1
2
12

样例输出 复制

1
-1
6

提示

## 数据范围
| 测试点 | 木块数量 $n$ | 特殊性质 |
| :----: | :----------: | :------: |
|  1~5   |   $\le25$    |    无    |
|  6~10  |   $\le50$    |    无    |
| 11~20  |   $\le100$   |    无    |
| 20~25  |  $\le10^6$   |    无    |


题解:
比如$n=7$输出$4     (sqrt(3*4+4*1))$

如果$n$是完全平方数,则输出$sqrt(n)$。

否则用边长更大的正方形替代多个边长为1的正方形,
即等价于求方程$m * m - n - 3a - 8b - 15c - 24d - .... = 0 $的最小正整数解$m$。
由于$3a + 8b = k $当$ k > 13$时, 一定有非负整数解。
所以等价于求方程$ m * m - n - 3a - 8b = 0 $的最小正整数解$m$。

令$m = ceil(sqrt(n+3)) $或者$ ceil(sqrt(n+3)) + 1 $或者 $ceil(sqrt(n+3)) + 2$ 且$m <= ceil(sqrt(n)) + 2$
求方程$m*m - n - 3a - 8b = 0 $的最小正整数解$m$,其中$n、a$和$b $都是非负整数。
且$ a + b$必须$<= m/2 * m/2;$
$b必须 <= m/3 * m/3;$
如果$a*b$非$0$,则$m > 4$。


来源/分类