Official

G - sqrt(n²+n+X) Editorial by sounansya


\(m = \sqrt{n^2+n+X}\) とします。 \(m \geq 0 \) という条件下で、この式は以下のように同値変形できます。

\[ \begin{aligned} &\phantom{\Leftrightarrow} m = \sqrt{n^2+n+X}\\ &\Leftrightarrow m^2=n^2+n+X\\ &\Leftrightarrow (2m+2n+1)(2m-2n-1)=4X-1\\ \end{aligned} \]

したがって、 \(4X-1\) の(負も含む)約数 \(d\) 全てに対して \(\displaystyle 2m+2n+1=d,\ 2m-2n-1=\frac{4X-1}d\)\(m \geq 0\) を満たす整数の組 \((n,m)\) が存在するか判定し、解が存在するような \(n\) を全て列挙すれば良いです。

以上を適切に実装することでこの問題に正答することができます。計算量は \(O(\sqrt X)\) です。

実装例(Python3)

x = int(input())
ans = []
c = 4 * x - 1

def add(d):
    ans.append((d - c // d - 2) // 4)

d = -1
while d * d <= abs(c):
    d += 2
    if c % d != 0:
        continue
    add(d), add(-d)
    add(c // d), add(-c // d)
ans = sorted(list(set(ans)))
print(len(ans))
print(*ans)

posted:
last update: