# 平方和球柱的容量:精确整数平方 ## 最大数量的证明 记 $C(n)=\lfloor(n+1)^2/2\rfloor-1$ . **上界。** 设已经放入了 $T=C(n)+1=\lfloor(n+1)^2/2\rfloor$ 个球。考察最大的 $n+1$ 个编号,即 $T-n,\ldots,T$ .其中任意两个不同编号之和严格大于 $n^2$ 且严格小于 $(n+1)^2$ ,所以不能相邻。每根柱子的编号从底到顶严格递增,这些大编号在该柱上必然构成连续的顶端部分;若某柱有两个,就会有两个相邻的大编号,产生矛盾。因此需要至少 $n+1$ 根柱子,上界成立。 **达到上界的构造。** 一根柱子只放球一。对于奇数 $n>1$ ,在当前 $n$ 根柱子上放两层,从顶到底描述如下,局部列编号为 $j=0,\ldots,n-1$ : $$\text{上层}_j=C(n)-n+1+j,\qquad \text{下层}_j=C(n)-n-j.$$ 再在中间 $n-2$ 根柱子的下方递归放入规模 $n-2$ 的方案。上下两层相邻和为 $n^2$ ;第二层与递归部分第一层的相邻和为 $(n-1)^2$ .剩余相邻关系由归纳保证。两层使用最大的 $2n$ 个编号,因为 $C(n)-C(n-2)=2n$ ,所有编号不重不漏。 对于偶数 $n$ ,最上层从左到右为 $C(n),C(n)-1,\ldots,C(n)-n+1$ ,前 $n-1$ 根柱子的下方放规模 $n-1$ 的方案。相接两层的编号和为 $n^2$ ,并且 $C(n)-C(n-1)=n$ .故也合法且恰好用尽一到 $C(n)$ . 所有列从顶到底严格递减,因此逆向按编号从小到大放入,正好遵守原操作时序。构造与上界合起来证明最优数量就是 $C(n)$ . ## 用 NTT 计算大整数 需要精确计算 $\lfloor(N+1)^2/2\rfloor-1$ .先删除输入的前导零,按低位在前的百进制数字存储 $N$ ,加一后对其数字多项式做平方。平方的卷积系数进位,得到 $(N+1)^2$ ;从高位到低位除以二并丢弃余数,再减一输出。 使用模数 $p=1004535809=479\times2^{21}+1$ 和原根三。$N+1$ 至多有 $100001$ 个十进制位,即至多 $50001$ 个百进制位。每个未经进位的卷积系数不超过 $$50001\times99^2=490059801