這是一道經典的數學/算法題:給定總墓穴數 n (1 <= n <= 10^14),找出所有由連續正整數邊長的正方形區域組成的墓地設計。每個區域邊長為 s,包含 s^2 個墓穴,所有區域邊長互不相同且構成連續序列。輸出所有可能的設計方案,按區域數量降序排列。
設連續邊長為 k, k+1, ..., k+l-1(共 l 個區域),則總墓穴數:
n = k^2 + (k+1)^2 + ... + (k+l-1)^2
利用平方和公式:
Σ_{i=0}^{l-1} (k+i)^2 = l*k^2 + k*l*(l-1) + (l-1)l(2l-1)/6
對於給定 l,可解一元二次方程求 k,判斷是否為正整數解。
l。因為最小邊長至少為 1,最大 l 滿足 1^2+2^2+...+l^2 <= n,即 l(l+1)(2l+1)/6 <= n。對於 n <= 10^14,l 最大約 10^4 量級,可直接枚舉。l,由方程 l*k^2 + l(l-1)*k + (l-1)l(2l-1)/6 - n = 0 求解 k。Δ = l^2(l-1)^2 - 4*l*((l-1)l(2l-1)/6 - n) 需為完全平方數,且 k = (-l(l-1) + sqrt(Δ)) / (2l) 為正整數。(l, k),按 l 降序輸出。輸入 2030:
l=4:k=21 → 21²+22²+23²+24² = 441+484+529+576 = 2030l=3:k=25 → 25²+26²+27² = 625+676+729 = 2030輸出:
2
4 21 22 23 24
3 25 26 27
枚舉 l 至 O(n^{1/3}),每步常數時間運算,總體極快,適合 n <= 10^14。